Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-06-11 17:26:02 +0000
committerEike Stepper2012-06-11 17:26:02 +0000
commitdb5ea347d0c2daa6751393da9f005531845b86ce (patch)
treebc11470480dbdc31ab5b6a7fd2b6947d11ba9df8
parente14126c827d9333146f95b039e05b345c7dfca74 (diff)
downloadcdo-db5ea347d0c2daa6751393da9f005531845b86ce.tar.gz
cdo-db5ea347d0c2daa6751393da9f005531845b86ce.tar.xz
cdo-db5ea347d0c2daa6751393da9f005531845b86ce.zip
[382278] Provide Net4j example installers
https://bugs.eclipse.org/bugs/show_bug.cgi?id=382278
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.classpath6
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.project28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/META-INF/MANIFEST.MF11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/Update Net4j Example Installers.launch21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/about.html70
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/build.properties24
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/META-INF/MANIFEST.MF19
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/build.properties24
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.xml24
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPane.java122
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPaneCreator.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/bundle/OM.java47
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/Messages.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/messages.properties14
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/META-INF/MANIFEST.MF16
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.ini15
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.mappings6
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.properties31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/build.properties29
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/modeling32.pngbin0 -> 2414 bytes
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.xml28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChat.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChatRoom.java18
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IComment.java23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/ICommentEvent.java26
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Chat.java72
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatFactory.java31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoom.java36
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoomFactory.java32
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Comment.java51
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/CommentEvent.java46
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/TextMessage.java37
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/bundle/OM.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/.api_filters12
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/META-INF/MANIFEST.MF19
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/build.properties23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IAccount.java31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddy.java50
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyContainer.java20
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyProvider.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyStateEvent.java28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaboration.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationContainer.java20
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationProvider.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacility.java29
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacilityInstalledEvent.java28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembership.java23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipContainer.java20
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipKey.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipProvider.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessage.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessageEvent.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISession.java31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISessionProvider.java23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Account.java79
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Buddy.java226
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/BuddyContainer.java152
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Collaboration.java297
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/CollaborationContainer.java152
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Membership.java118
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipContainer.java130
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipKey.java72
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MessageEvent.java37
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/bundle/OM.java50
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateIndication.java37
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateNotification.java40
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftIndication.java70
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftNotification.java39
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageIndication.java57
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageNotification.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolConstants.java55
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolUtil.java226
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ClientFacilityFactory.java26
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Facility.java66
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Message.java52
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ServerFacilityFactory.java26
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/BuddiesServer.launch33
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/META-INF/MANIFEST.MF18
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.ini15
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.mappings6
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.properties31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/build.properties29
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/config/cdo-server.xml10
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/modeling32.pngbin0 -> 2414 bytes
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.xml24
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java265
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java62
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java102
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/bundle/OM.java65
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/Messages.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/messages.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddiesServerProtocol.java86
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java39
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java39
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java51
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java42
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java52
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java93
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java92
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/LoadAccountIndication.java48
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java104
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerBuddyStateIndication.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java62
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java37
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/ServerConstants.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient1.launch471
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient2.launch470
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient3.launch470
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/META-INF/MANIFEST.MF27
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/build.properties25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.properties17
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.xml59
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/schema/facilityPaneCreators.exsd128
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/AbstractItemProvider.java237
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesContentProvider.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesItemProvider.java49
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/ChatInstaller.java29
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsContentProvider.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsItemProvider.java141
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/MembershipItemProvider.java49
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ConnectAction.java32
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/DisconnectAction.java32
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/FlashAction.java32
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ReconnectAction.java33
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java190
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/bundle/OM.java59
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/dnd/BuddiesTransfer.java79
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/Messages.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/messages.properties37
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/preferences/BuddiesPreferencePage.java87
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDragListener.java64
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDropAdapter.java56
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java63
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsPane.java334
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsView.java221
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/FacilityPane.java242
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/SessionManagerView.java153
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/ui/IFacilityPaneCreator.java28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/META-INF/MANIFEST.MF17
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.ini15
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.mappings6
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.properties31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/build.properties28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/modeling32.pngbin0 -> 2414 bytes
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java55
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddySession.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManager.java43
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManagerEvent.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java167
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java84
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java145
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/Self.java105
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/SessionManager.java278
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/bundle/OM.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddiesClientProtocol.java93
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java36
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java36
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java38
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java70
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/FacilityInstalledIndication.java46
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java46
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java46
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java43
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/LoadAccountRequest.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java78
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.options5
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/META-INF/MANIFEST.MF17
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/build.properties23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/IJMSAdmin.java23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/JMSAdminUtil.java29
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/JMSAdmin.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/bundle/OM.java46
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSAdminProtocol.java27
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSCreateDestinationRequest.java46
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.core.prefs386
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/CDDL.html584
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/META-INF/MANIFEST.MF10
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/about.html44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/build.properties23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/BytesMessage.java577
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Connection.java414
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionConsumer.java85
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionFactory.java126
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionMetaData.java133
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/DeliveryMode.java79
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Destination.java97
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ExceptionListener.java57
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/IllegalStateException.java48
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidClientIDException.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidDestinationException.java61
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidSelectorException.java61
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSException.java110
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSSecurityException.java61
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MapMessage.java529
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Message.java1511
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageConsumer.java191
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageEOFException.java61
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageFormatException.java69
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageListener.java51
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotReadableException.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotWriteableException.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageProducer.java389
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ObjectMessage.java90
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Queue.java81
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueBrowser.java115
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnection.java118
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnectionFactory.java87
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueReceiver.java73
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueRequestor.java124
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSender.java197
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSession.java187
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ResourceAllocationException.java63
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSession.java102
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSessionPool.java63
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Session.java807
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/StreamMessage.java550
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryQueue.java58
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryTopic.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TextMessage.java82
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Topic.java90
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnection.java146
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnectionFactory.java84
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicPublisher.java207
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicRequestor.java123
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSession.java293
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSubscriber.java125
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionInProgressException.java62
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionRolledBackException.java60
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnection.java78
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnectionFactory.java101
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnection.java75
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnectionFactory.java85
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueSession.java58
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XASession.java123
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnection.java76
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnectionFactory.java85
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicSession.java57
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.options3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/META-INF/MANIFEST.MF18
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/build.properties23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/db.txt61
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCStore.java128
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCTransaction.java102
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JMSSchema.java73
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/bundle/OM.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/jdbc/JDBCUtil.java48
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.options6
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/META-INF/MANIFEST.MF21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/build.properties23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/Server.java235
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConnection.java115
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConsumer.java148
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerDestination.java127
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerSession.java113
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/bundle/OM.java59
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/Messages.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/messages.properties17
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSAcknowledgeIndication.java49
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSClientMessageIndication.java53
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSCommitIndication.java77
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSLogonIndication.java57
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSOpenSessionIndication.java50
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRecoverIndication.java54
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRegisterConsumerIndication.java53
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRollbackIndication.java55
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerMessageRequest.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocol.java64
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocolFactory.java39
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSSyncIndication.java38
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocol.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocolFactory.java39
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSCreateDestinationIndication.java65
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractStore.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractTransaction.java230
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPStore.java40
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPTransaction.java85
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/StoreException.java38
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IConnection.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IDestination.java29
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServer.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServerConsumer.java34
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/ISession.java21
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStore.java27
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStoreTransaction.java68
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/JMSServerUtil.java37
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.project28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSSeparatedTest.launch13
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSTest.launch13
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/META-INF/MANIFEST.MF18
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/RMIRegistry.launch13
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/build.properties26
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/config/org.eclipse.net4j.jms.server.jdbc.properties15
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSSeparatedTest.java147
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSTest.java132
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.classpath7
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.options5
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.project44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.core.prefs382
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/META-INF/MANIFEST.MF20
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/about.html28
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/build.properties23
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/copyright.txt8
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/plugin.properties11
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/BytesMessageImpl.java185
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionFactoryImpl.java68
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionImpl.java407
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionMetaDataImpl.java71
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/DestinationImpl.java19
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSDestination.java18
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSTemporaryDestination.java20
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MapMessageImpl.java175
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageConsumerImpl.java160
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageImpl.java464
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageProducerImpl.java160
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/NotYetImplementedException.java35
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ObjectMessageImpl.java92
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueBrowserImpl.java54
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueImpl.java35
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueReceiverImpl.java26
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueSenderImpl.java39
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/SessionImpl.java455
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/StreamMessageImpl.java175
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryQueueImpl.java30
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryTopicImpl.java30
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TextMessageImpl.java66
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicImpl.java35
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicPublisherImpl.java50
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicSubscriberImpl.java43
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/bundle/OM.java53
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/Messages.java41
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/messages.properties22
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSAcknowledgeRequest.java38
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientMessageRequest.java47
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientProtocol.java44
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCloseSessionRequest.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCommitRequest.java69
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSDeregisterConsumerRequest.java49
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogoffRequest.java34
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogonRequest.java49
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSOpenSessionRequest.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRecoverRequest.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRegisterConsumerRequest.java64
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRollbackRequest.java45
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSServerMessageIndication.java43
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSSyncRequest.java47
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/DestinationUtil.java145
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/MessageUtil.java161
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/TypeUtil.java301
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSAdminProtocolConstants.java25
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSInitialContext.java85
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSProtocolConstants.java85
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSUtil.java48
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/icons/full/ctool16/NewEMFExample.gifbin0 -> 577 bytes
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/icons/full/wizban/NewEMFExample.gifbin0 -> 3163 bytes
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/plugin.properties31
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/plugin.xml105
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/update.ant32
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/updateLib.ant35
521 files changed, 39046 insertions, 0 deletions
diff --git a/plugins/org.eclipse.net4j.examples.installer/.classpath b/plugins/org.eclipse.net4j.examples.installer/.classpath
new file mode 100644
index 0000000000..c83506765b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/.project b/plugins/org.eclipse.net4j.examples.installer/.project
new file mode 100644
index 0000000000..4f65191249
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.examples.installer</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..90b20414ac
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:57:50 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..e05bd49a20
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..458319cb24
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.net4j.examples.installer;singleton:=true
+Bundle-Version: 4.1.0.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.common.ui;bundle-version="[2.5.0,3.0.0)"
diff --git a/plugins/org.eclipse.net4j.examples.installer/Update Net4j Example Installers.launch b/plugins/org.eclipse.net4j.examples.installer/Update Net4j Example Installers.launch
new file mode 100644
index 0000000000..3b62a35f70
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/Update Net4j Example Installers.launch
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ant.AntLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="true"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;resources&gt;&#13;&#10;&lt;item path=&quot;/org.eclipse.emf.cdo.examples.installer&quot; type=&quot;4&quot;/&gt;&#13;&#10;&lt;item path=&quot;/org.eclipse.emf.cdo.examples.installer.client&quot; type=&quot;4&quot;/&gt;&#13;&#10;&lt;item path=&quot;/org.eclipse.emf.cdo.examples.installer.clone&quot; type=&quot;4&quot;/&gt;&#13;&#10;&lt;item path=&quot;/org.eclipse.emf.cdo.examples.installer.master&quot; type=&quot;4&quot;/&gt;&#13;&#10;&lt;item path=&quot;/org.eclipse.net4j.examples.installer&quot; type=&quot;4&quot;/&gt;&#13;&#10;&lt;/resources&gt;}"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.net4j.examples.installer/update.ant"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_31"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.ant.internal.launching.remote.InternalAntRunner"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.net4j.examples.installer"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.net4j.examples.installer/update.ant}"/>
+<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/about.html b/plugins/org.eclipse.net4j.examples.installer/about.html
new file mode 100644
index 0000000000..f2decc3a0d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/about.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+
+ <head>
+
+ <meta content="text/html; charset=ISO-8859-1"
+ http-equiv="Content-Type"/>
+
+ <title>About</title>
+
+ </head>
+
+ <body lang="EN-US">
+
+ <h2>About This Content</h2>
+
+ <p>May 17, 2007</p>
+
+ <h3>License</h3>
+
+ <p>The Eclipse Foundation makes available all content in this
+ plug-in (&quot;Content&quot;). Unless otherwise indicated below,
+ the Content is provided to you under the terms and conditions of
+ the Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of
+ the EPL is available at
+ <a href="http://www.eclipse.org/legal/epl-v10.html">
+ http://www.eclipse.org/legal/epl-v10.html</a>. For purposes of the
+ EPL, &quot;Program&quot; will mean the Content.</p>
+
+ <p>If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ (&quot;Redistributor&quot;) and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor&apos;s license that was provided with the Content. If
+ no such license exists, contact the Redistributor. Unless otherwise
+ indicated below, the terms and conditions of the EPL still apply to
+ any source code in the Content.</p>
+
+ </body>
+
+</html>
+
diff --git a/plugins/org.eclipse.net4j.examples.installer/build.properties b/plugins/org.eclipse.net4j.examples.installer/build.properties
new file mode 100644
index 0000000000..c88c83f06f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/build.properties
@@ -0,0 +1,24 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = META-INF/,\
+ plugin.properties,\
+ about.html,\
+ copyright.txt,\
+ examples/,\
+ plugin.xml,\
+ icons/
+src.includes = about.html,\
+ copyright.txt,\
+ Update Net4j Example Installers.launch,\
+ update.ant
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.options b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.options
new file mode 100644
index 0000000000..497a5c463f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.buddies.chat.ui/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.project b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.project
new file mode 100644
index 0000000000..3a31d916a0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.buddies.chat.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..6e65a3ac61
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:53:43 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..9cf8670416
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.buddies.chat.ui;singleton:=true
+Bundle-Version: 4.0.100.qualifier
+Bundle-Activator: org.eclipse.net4j.buddies.chat.internal.ui.bundle.OM$Activator
+Bundle-Vendor: %providerName
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.buddies.ui;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.net4j.buddies.chat;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.net4j.ui;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.ui.shared;bundle-version="[4.0.0,5.0.0)"
+Export-Package: org.eclipse.net4j.buddies.chat.internal.ui;version="4.0.100",
+ org.eclipse.net4j.buddies.chat.internal.ui.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.chat.internal.ui.messages;version="4.0.100";x-internal:=true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/build.properties
new file mode 100644
index 0000000000..6e23842920
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/build.properties
@@ -0,0 +1,24 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ plugin.properties,\
+ .options,\
+ about.html,\
+ copyright.txt
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.properties
new file mode 100644
index 0000000000..e0bb419787
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Buddies Chat UI
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.xml b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.xml
new file mode 100644
index 0000000000..3773c1fc44
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension
+ point="org.eclipse.net4j.buddies.ui.facilityPaneCreators">
+ <facilityPaneCreator
+ class="org.eclipse.net4j.buddies.chat.internal.ui.ChatPaneCreator"
+ icon="platform:/plugin/org.eclipse.net4j.ui.shared/icons/full/obj16/chat.gif"
+ type="chat"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPane.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPane.java
new file mode 100644
index 0000000000..a47ebf2f6f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPane.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat.internal.ui;
+
+import org.eclipse.net4j.buddies.chat.IChat;
+import org.eclipse.net4j.buddies.chat.IComment;
+import org.eclipse.net4j.buddies.chat.internal.ui.messages.Messages;
+import org.eclipse.net4j.buddies.internal.chat.CommentEvent;
+import org.eclipse.net4j.buddies.internal.ui.views.CollaborationsPane;
+import org.eclipse.net4j.buddies.internal.ui.views.FacilityPane;
+import org.eclipse.net4j.ui.shared.SharedIcons;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+import org.eclipse.net4j.util.ui.widgets.SashComposite;
+
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Eike Stepper
+ */
+public class ChatPane extends FacilityPane
+{
+ private SashComposite sashComposite;
+
+ private Text input;
+
+ private Text output;
+
+ public ChatPane(CollaborationsPane collaborationsPane, int style)
+ {
+ super(collaborationsPane, style);
+ }
+
+ @Override
+ protected void handleEvent(IEvent event) throws Exception
+ {
+ if (event instanceof CommentEvent)
+ {
+ CommentEvent e = (CommentEvent)event;
+ IComment comment = e.getComment();
+ String text = comment.getText();
+ output.append(comment.getSenderID() + ": " + text + StringUtil.NL); //$NON-NLS-1$
+ }
+ }
+
+ @Override
+ protected Control createUI(Composite parent)
+ {
+ sashComposite = new SashComposite(parent, SWT.NONE, 16, 80)
+ {
+ @Override
+ protected Control createControl1(Composite parent)
+ {
+ output = new Text(parent, SWT.MULTI);
+ return output;
+ }
+
+ @Override
+ protected Control createControl2(Composite parent)
+ {
+ input = new Text(parent, SWT.MULTI);
+ input.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent e)
+ {
+ if ((e.character == SWT.CR || e.character == SWT.LF) && e.stateMask == 0)
+ {
+ ((IChat)getFacility()).sendComment(input.getText());
+ input.setText(""); //$NON-NLS-1$
+ e.doit = false;
+ }
+ }
+ });
+
+ return input;
+ }
+ };
+
+ sashComposite.setVertical(true);
+ return sashComposite;
+ }
+
+ @Override
+ protected void fillCoolBar(IContributionManager manager)
+ {
+ manager.add(new SafeAction(Messages.getString("ChatPane.2"), Messages.getString("ChatPane.3"), SharedIcons //$NON-NLS-1$ //$NON-NLS-2$
+ .getDescriptor(SharedIcons.ETOOL_VERTICAL))
+ {
+ @Override
+ protected void safeRun() throws Exception
+ {
+ sashComposite.setVertical(true);
+ }
+ });
+
+ manager.add(new SafeAction(Messages.getString("ChatPane.4"), Messages.getString("ChatPane.5"), SharedIcons //$NON-NLS-1$ //$NON-NLS-2$
+ .getDescriptor(SharedIcons.ETOOL_HORIZONTAL))
+ {
+ @Override
+ protected void safeRun() throws Exception
+ {
+ sashComposite.setVertical(false);
+ }
+ });
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPaneCreator.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPaneCreator.java
new file mode 100644
index 0000000000..200501b041
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/ChatPaneCreator.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat.internal.ui;
+
+import org.eclipse.net4j.buddies.chat.IChat;
+import org.eclipse.net4j.buddies.internal.ui.views.CollaborationsPane;
+import org.eclipse.net4j.buddies.internal.ui.views.FacilityPane;
+import org.eclipse.net4j.buddies.ui.IFacilityPaneCreator;
+import org.eclipse.net4j.ui.shared.SharedIcons;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ * @author Eike Stepper
+ */
+public class ChatPaneCreator implements IFacilityPaneCreator
+{
+ public ChatPaneCreator()
+ {
+ }
+
+ public String getType()
+ {
+ return IChat.TYPE;
+ }
+
+ public ImageDescriptor getImageDescriptor()
+ {
+ return SharedIcons.getDescriptor(SharedIcons.OBJ_CHAT);
+ }
+
+ public FacilityPane createPane(CollaborationsPane collaborationsPane, int style)
+ {
+ return new ChatPane(collaborationsPane, style);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/bundle/OM.java
new file mode 100644
index 0000000000..31b045b5e0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/bundle/OM.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat.internal.ui.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+import org.eclipse.net4j.util.ui.UIActivator;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.buddies.chat.ui"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends UIActivator
+ {
+ public static Activator INSTANCE;
+
+ public Activator()
+ {
+ super(BUNDLE);
+ INSTANCE = this;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/Messages.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/Messages.java
new file mode 100644
index 0000000000..1e2a08cdc1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/Messages.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Victor Roldan Betancort - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.net4j.buddies.chat.internal.ui.messages;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.net4j.buddies.chat.internal.ui.messages.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/messages.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/messages.properties
new file mode 100644
index 0000000000..d6582f39bc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat.ui/src/org/eclipse/net4j/buddies/chat/internal/ui/messages/messages.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Victor Roldan Betancort - initial API and implementation
+# Eike Stepper - maintenance
+
+ChatPane.2=Vertical Layout
+ChatPane.3=Vertical Layout
+ChatPane.4=Horizontal Layout
+ChatPane.5=Horizontal Layout
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.options b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.options
new file mode 100644
index 0000000000..1b6c9cb649
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.buddies.chat/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.project b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.project
new file mode 100644
index 0000000000..0f1368c402
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.buddies.chat</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..2e8471f207
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:54:17 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..ad09c12c26
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.buddies.chat;singleton:=true
+Bundle-Version: 4.0.100.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-Activator: org.eclipse.net4j.buddies.internal.chat.bundle.OM$Activator
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.buddies.common;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Export-Package: org.eclipse.net4j.buddies.chat;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.chat;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.chat.bundle;version="4.0.100";x-internal:=true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.ini b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.ini
new file mode 100644
index 0000000000..b7e87ca285
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.mappings b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.mappings
new file mode 100644
index 0000000000..bddaab4310
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@ \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.properties
new file mode 100644
index 0000000000..f116ab5dbf
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/about.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = Net4j Buddies Chat
+featureText = Net4j Buddies Chat\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others. All rights reserved.\n\
+\n\
+Visit http://wiki.eclipse.org/Net4j
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/build.properties
new file mode 100644
index 0000000000..7fc5e88ba9
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/build.properties
@@ -0,0 +1,29 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = .,\
+ META-INF/,\
+ plugin.properties,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ plugin.xml,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ modeling32.png
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/modeling32.png b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/modeling32.png
new file mode 100644
index 0000000000..6b08de2ada
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.properties
new file mode 100644
index 0000000000..88a1f16582
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Buddies Chat
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.xml b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.xml
new file mode 100644
index 0000000000..06cc6db4dc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/plugin.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension
+ point="org.eclipse.net4j.util.factories">
+ <factory
+ class="org.eclipse.net4j.buddies.internal.chat.ChatFactory"
+ productGroup="org.eclipse.net4j.buddies.clientFacilities"
+ type="chat"/>
+ <factory
+ class="org.eclipse.net4j.buddies.internal.chat.ChatRoomFactory"
+ productGroup="org.eclipse.net4j.buddies.serverFacilities"
+ type="chat"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChat.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChat.java
new file mode 100644
index 0000000000..258db7ca21
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChat.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat;
+
+import org.eclipse.net4j.buddies.common.IFacility;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IChat extends IFacility
+{
+ public static final String TYPE = "chat"; //$NON-NLS-1$
+
+ public IComment[] getComments();
+
+ public void sendComment(String text);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChatRoom.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChatRoom.java
new file mode 100644
index 0000000000..e0c239caa4
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IChatRoom.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IChatRoom extends IChat
+{
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IComment.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IComment.java
new file mode 100644
index 0000000000..08144701dd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/IComment.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IComment
+{
+ public long getReceiveTime();
+
+ public String getSenderID();
+
+ public String getText();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/ICommentEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/ICommentEvent.java
new file mode 100644
index 0000000000..5c5943bc01
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/chat/ICommentEvent.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.chat;
+
+import org.eclipse.net4j.util.event.IEvent;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICommentEvent extends IEvent
+{
+ /**
+ * @since 3.0
+ */
+ public IChat getSource();
+
+ public IComment getComment();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Chat.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Chat.java
new file mode 100644
index 0000000000..6f75253a0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Chat.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.chat.IChat;
+import org.eclipse.net4j.buddies.chat.IComment;
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.buddies.spi.common.Facility;
+import org.eclipse.net4j.util.event.IListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class Chat extends Facility implements IChat
+{
+ private List<IComment> comments = new ArrayList<IComment>();
+
+ public Chat()
+ {
+ super(TYPE);
+ }
+
+ public IComment[] getComments()
+ {
+ synchronized (comments)
+ {
+ return comments.toArray(new IComment[comments.size()]);
+ }
+ }
+
+ public void sendComment(String text)
+ {
+ TextMessage message = new TextMessage(text);
+ sendMessage(message);
+ addComment(message.getSenderID(), text);
+ }
+
+ @Override
+ public void handleMessage(IMessage message)
+ {
+ if (message instanceof TextMessage)
+ {
+ addComment(message.getSenderID(), ((TextMessage)message).getText());
+ }
+ }
+
+ protected void addComment(String senderID, String text)
+ {
+ Comment comment = new Comment(System.currentTimeMillis(), senderID, text);
+ synchronized (comments)
+ {
+ comments.add(comment);
+ }
+
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new CommentEvent(this, comment), listeners);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatFactory.java
new file mode 100644
index 0000000000..f22be39d81
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatFactory.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.chat.IChat;
+import org.eclipse.net4j.buddies.spi.common.ClientFacilityFactory;
+import org.eclipse.net4j.util.factory.ProductCreationException;
+
+/**
+ * @author Eike Stepper
+ */
+public class ChatFactory extends ClientFacilityFactory
+{
+ public ChatFactory()
+ {
+ super(IChat.TYPE);
+ }
+
+ public Chat create(String description) throws ProductCreationException
+ {
+ return new Chat();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoom.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoom.java
new file mode 100644
index 0000000000..d1325ccdaa
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoom.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.chat.IChatRoom;
+import org.eclipse.net4j.buddies.common.IMessage;
+
+/**
+ * @author Eike Stepper
+ */
+public class ChatRoom extends Chat implements IChatRoom
+{
+ public ChatRoom()
+ {
+ }
+
+ @Override
+ public void sendComment(String text)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void handleMessage(IMessage message)
+ {
+ sendMessage(message);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoomFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoomFactory.java
new file mode 100644
index 0000000000..4676e76799
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/ChatRoomFactory.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.spi.common.ServerFacilityFactory;
+import org.eclipse.net4j.util.factory.ProductCreationException;
+
+/**
+ * @author Eike Stepper
+ */
+public class ChatRoomFactory extends ServerFacilityFactory
+{
+ public static final String TYPE = "chat"; //$NON-NLS-1$
+
+ public ChatRoomFactory()
+ {
+ super(TYPE);
+ }
+
+ public ChatRoom create(String description) throws ProductCreationException
+ {
+ return new ChatRoom();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Comment.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Comment.java
new file mode 100644
index 0000000000..a56fa81eb3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/Comment.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.chat.IComment;
+
+import java.io.Serializable;
+
+/**
+ * @author Eike Stepper
+ */
+public class Comment implements IComment, Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private long receiveTime;
+
+ private String senderID;
+
+ private String text;
+
+ public Comment(long receiveTime, String senderID, String text)
+ {
+ this.receiveTime = receiveTime;
+ this.senderID = senderID;
+ this.text = text;
+ }
+
+ public long getReceiveTime()
+ {
+ return receiveTime;
+ }
+
+ public String getSenderID()
+ {
+ return senderID;
+ }
+
+ public String getText()
+ {
+ return text;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/CommentEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/CommentEvent.java
new file mode 100644
index 0000000000..6045ff4204
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/CommentEvent.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.chat.IChat;
+import org.eclipse.net4j.buddies.chat.IComment;
+import org.eclipse.net4j.buddies.chat.ICommentEvent;
+import org.eclipse.net4j.util.event.Event;
+
+/**
+ * @author Eike Stepper
+ */
+public class CommentEvent extends Event implements ICommentEvent
+{
+ private static final long serialVersionUID = 1L;
+
+ private IComment comment;
+
+ public CommentEvent(IChat chat, IComment comment)
+ {
+ super(chat);
+ this.comment = comment;
+ }
+
+ /**
+ * @since 3.0
+ */
+ @Override
+ public IChat getSource()
+ {
+ return (IChat)super.getSource();
+ }
+
+ public IComment getComment()
+ {
+ return comment;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/TextMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/TextMessage.java
new file mode 100644
index 0000000000..8f74e4624e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/TextMessage.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat;
+
+import org.eclipse.net4j.buddies.spi.common.Message;
+
+/**
+ * @author Eike Stepper
+ */
+public class TextMessage extends Message
+{
+ private static final long serialVersionUID = 1L;
+
+ private String text;
+
+ public TextMessage(String text)
+ {
+ this.text = encode(text);
+ }
+
+ protected TextMessage()
+ {
+ }
+
+ public String getText()
+ {
+ return decode(text);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/bundle/OM.java
new file mode 100644
index 0000000000..7a19b9a749
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.chat/src/org/eclipse/net4j/buddies/internal/chat/bundle/OM.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.chat.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.buddies.chat"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.options b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.options
new file mode 100644
index 0000000000..d5862c214b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.buddies.common/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.project b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.project
new file mode 100644
index 0000000000..1afa56bf3e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.buddies.common</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/.api_filters b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/.api_filters
new file mode 100644
index 0000000000..82f488a67a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/.api_filters
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.net4j.buddies.common" version="2">
+ <resource path="src/org/eclipse/net4j/buddies/spi/common/Facility.java" type="org.eclipse.net4j.buddies.spi.common.Facility">
+ <filter id="643842064">
+ <message_arguments>
+ <message_argument value="Collaboration"/>
+ <message_argument value="Facility"/>
+ <message_argument value="getCollaboration()"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..616547b21d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 13:04:16 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..3551fe6f8f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.buddies.common
+Bundle-Version: 4.0.100.qualifier
+Bundle-Vendor: %providerName
+Bundle-Activator: org.eclipse.net4j.buddies.internal.common.bundle.OM$Activator
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Import-Package: org.osgi.framework;version="[1.3.0,2.0.0)";resolution:=optional
+Export-Package: org.eclipse.net4j.buddies.common;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.common;version="4.0.100";x-friends:="org.eclipse.net4j.buddies,org.eclipse.net4j.buddies.server,org.eclipse.net4j.buddies.ui",
+ org.eclipse.net4j.buddies.internal.common.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.internal.common.protocol;version="4.0.100";x-friends:="org.eclipse.net4j.buddies,org.eclipse.net4j.buddies.server",
+ org.eclipse.net4j.buddies.spi.common;version="4.0.100"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/build.properties
new file mode 100644
index 0000000000..69ee21b801
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties,\
+ .options
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/plugin.properties
new file mode 100644
index 0000000000..6a97195fc0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Buddies Common
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IAccount.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IAccount.java
new file mode 100644
index 0000000000..78e472fdf5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IAccount.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.security.IUserAware;
+
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IAccount extends IUserAware
+{
+ public void setPassword(String password);
+
+ public boolean authenticate(String password);
+
+ public Map<String, String> getProperties();
+
+ public void touch();
+
+ public long getTimeStamp();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddy.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddy.java
new file mode 100644
index 0000000000..303c2a65b0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddy.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.security.IUserAware;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddy extends IUserAware, IMembershipContainer, ICollaborationProvider, IAdaptable
+{
+ public State getState();
+
+ public IAccount getAccount();
+
+ public ISession getSession();
+
+ public Set<String> getFacilityTypes();
+
+ public IMembership initiate();
+
+ public IMembership initiate(IBuddy buddy);
+
+ public IMembership[] initiate(Collection<IBuddy> buddies);
+
+ public IMembership join(long collaborationID);
+
+ public IMembership join(Object invitationToken);
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum State
+ {
+ AVAILABLE, LONESOME, AWAY, DO_NOT_DISTURB
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyContainer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyContainer.java
new file mode 100644
index 0000000000..1dda8a8a97
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyContainer.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.container.IContainer;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddyContainer extends IBuddyProvider, IContainer<IBuddy>
+{
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyProvider.java
new file mode 100644
index 0000000000..ca81e2d12c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyProvider.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddyProvider
+{
+ public IBuddy[] getBuddies();
+
+ public IBuddy getBuddy(String userID);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyStateEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyStateEvent.java
new file mode 100644
index 0000000000..ca2cd1a18f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IBuddyStateEvent.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.event.IEvent;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddyStateEvent extends IEvent
+{
+ /**
+ * @since 3.0
+ */
+ public IBuddy getSource();
+
+ public IBuddy.State getOldState();
+
+ public IBuddy.State getNewState();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaboration.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaboration.java
new file mode 100644
index 0000000000..63dc42346b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaboration.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICollaboration extends IMembershipContainer, IBuddyProvider, IAdaptable
+{
+ public long getID();
+
+ public String getTitle();
+
+ public String getDescription();
+
+ public Visibility getVisibility();
+
+ public boolean isPublic();
+
+ public void setPublic(String title, String description);
+
+ public void setPrivate();
+
+ public String[] getFacilityTypes();
+
+ public IFacility[] getFacilities();
+
+ public IFacility getFacility(String type);
+
+ public enum Visibility
+ {
+ PRIVATE, PUBLIC
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationContainer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationContainer.java
new file mode 100644
index 0000000000..78af2986a6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationContainer.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.container.IContainer;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICollaborationContainer extends ICollaborationProvider, IContainer<ICollaboration>
+{
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationProvider.java
new file mode 100644
index 0000000000..125b069f83
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ICollaborationProvider.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICollaborationProvider
+{
+ public ICollaboration[] getCollaborations();
+
+ public ICollaboration getCollaboration(long id);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacility.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacility.java
new file mode 100644
index 0000000000..c92036a60b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacility.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.event.INotifier;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IFacility extends INotifier, IAdaptable
+{
+ public String getType();
+
+ public ICollaboration getCollaboration();
+
+ public void setCollaboration(ICollaboration collaboration);
+
+ public void sendMessage(IMessage message);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacilityInstalledEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacilityInstalledEvent.java
new file mode 100644
index 0000000000..05ef1c360a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IFacilityInstalledEvent.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.event.IEvent;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IFacilityInstalledEvent extends IEvent
+{
+ /**
+ * @since 3.0
+ */
+ public ICollaboration getSource();
+
+ public IFacility getFacility();
+
+ public boolean fromRemote();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembership.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembership.java
new file mode 100644
index 0000000000..073780340a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembership.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.container.IContainer;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IMembership extends IMembershipKey, IContainer<Object>, IAdaptable
+{
+ public long getStartTime();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipContainer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipContainer.java
new file mode 100644
index 0000000000..5a830a46c3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipContainer.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.container.IContainer;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IMembershipContainer extends IMembershipProvider, IContainer<IMembership>
+{
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipKey.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipKey.java
new file mode 100644
index 0000000000..2602a7148b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipKey.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IMembershipKey
+{
+ public IBuddy getBuddy();
+
+ public ICollaboration getCollaboration();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipProvider.java
new file mode 100644
index 0000000000..bdadda1ace
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMembershipProvider.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IMembershipProvider
+{
+ public IMembership[] getMemberships();
+
+ public IMembership getMembership(IBuddy buddy, ICollaboration collaboration);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessage.java
new file mode 100644
index 0000000000..fb720a421e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessage.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IMessage extends IAdaptable
+{
+ public String getSenderID();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessageEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessageEvent.java
new file mode 100644
index 0000000000..c459d891c3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/IMessageEvent.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.util.event.IEvent;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IMessageEvent extends IEvent
+{
+ public IMessage getMessage();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISession.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISession.java
new file mode 100644
index 0000000000..a1a1a5636f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISession.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+import org.eclipse.net4j.protocol.IProtocol;
+import org.eclipse.net4j.util.event.INotifier;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ISession extends INotifier, IAdaptable
+{
+ /**
+ * @since 2.0
+ */
+ public IProtocol<?> getProtocol();
+
+ public IBuddy getSelf();
+
+ public void close();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISessionProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISessionProvider.java
new file mode 100644
index 0000000000..abe98aeae7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/common/ISessionProvider.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.common;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ISessionProvider
+{
+ public ISession[] getSessions();
+
+ public ISession getSession(String userID);
+
+ public ISession getSession(IBuddy buddy);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Account.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Account.java
new file mode 100644
index 0000000000..52e914d2bc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Account.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.util.ObjectUtil;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class Account implements IAccount, Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private String userID;
+
+ private transient String password;
+
+ private Map<String, String> properties = new HashMap<String, String>();
+
+ private long timeStamp;
+
+ protected Account()
+ {
+ }
+
+ public Account(String userID, String password)
+ {
+ this.userID = userID;
+ this.password = password;
+ }
+
+ public String getUserID()
+ {
+ return userID;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public boolean authenticate(String password)
+ {
+ return ObjectUtil.equals(password, this.password);
+ }
+
+ public Map<String, String> getProperties()
+ {
+ return properties;
+ }
+
+ public void touch()
+ {
+ timeStamp = System.currentTimeMillis();
+ }
+
+ public long getTimeStamp()
+ {
+ return timeStamp;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Buddy.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Buddy.java
new file mode 100644
index 0000000000..6e1acd620c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Buddy.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyStateEvent;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.event.Event;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class Buddy extends MembershipContainer implements IBuddy
+{
+ private ISession session;
+
+ private State state = State.AVAILABLE;
+
+ private Set<String> facilityTypes;
+
+ public Buddy(ISession session, Set<String> facilityTypes)
+ {
+ this.session = session;
+ this.facilityTypes = facilityTypes == null ? null : Collections.unmodifiableSet(facilityTypes);
+ }
+
+ public ISession getSession()
+ {
+ return session;
+ }
+
+ public void setSession(ISession session)
+ {
+ this.session = session;
+ }
+
+ public State getState()
+ {
+ return state;
+ }
+
+ public void setState(State state)
+ {
+ if (this.state != state)
+ {
+ IEvent event = new BuddyStateEvent(this.state, state);
+ this.state = state;
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(event, listeners);
+ }
+ }
+ }
+
+ public Set<String> getFacilityTypes()
+ {
+ if (facilityTypes == null)
+ {
+ facilityTypes = Collections.unmodifiableSet(loadFacilityTypes());
+ }
+
+ return facilityTypes;
+ }
+
+ public IMembership getMembership(Collaboration collaboration)
+ {
+ return getMembership(this, collaboration);
+ }
+
+ public IMembership removeMembership(Collaboration collaboration)
+ {
+ return removeMembership(this, collaboration);
+ }
+
+ public ICollaboration getCollaboration(long collaborationID)
+ {
+ for (IMembership membership : getMemberships())
+ {
+ ICollaboration collaboration = membership.getCollaboration();
+ if (collaboration.getID() == collaborationID)
+ {
+ return collaboration;
+ }
+ }
+
+ return null;
+ }
+
+ public ICollaboration[] getCollaborations()
+ {
+ List<ICollaboration> collaborations = new ArrayList<ICollaboration>();
+ for (IMembership membership : getMemberships())
+ {
+ ICollaboration collaboration = membership.getCollaboration();
+ collaborations.add(collaboration);
+ }
+
+ return collaborations.toArray(new ICollaboration[collaborations.size()]);
+ }
+
+ public IMembership initiate()
+ {
+ return initiate((IBuddy)null);
+ }
+
+ public IMembership initiate(IBuddy buddy)
+ {
+ HashSet<IBuddy> buddies = new HashSet<IBuddy>();
+ if (buddy != null)
+ {
+ buddies.add(buddy);
+ }
+
+ IMembership[] memberships = initiate(buddies);
+ return memberships.length == 0 ? null : memberships[0];
+ }
+
+ /**
+ * @see PlatformObject#getAdapter(Class)
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class adapter)
+ {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+
+ if (obj instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)obj;
+ return ObjectUtil.equals(getUserID(), buddy.getUserID());
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return ObjectUtil.hashCode(getUserID());
+ }
+
+ @Override
+ public String toString()
+ {
+ return MessageFormat.format("{0}[{1}]", getClass().getSimpleName(), getUserID()); //$NON-NLS-1$
+ }
+
+ protected Set<String> loadFacilityTypes()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class BuddyStateEvent extends Event implements IBuddyStateEvent
+ {
+ private static final long serialVersionUID = 1L;
+
+ private State oldState;
+
+ private State newState;
+
+ public BuddyStateEvent(State oldState, State newState)
+ {
+ super(Buddy.this);
+ this.oldState = oldState;
+ this.newState = newState;
+ }
+
+ @Override
+ public IBuddy getSource()
+ {
+ return (IBuddy)super.getSource();
+ }
+
+ public State getOldState()
+ {
+ return oldState;
+ }
+
+ public State getNewState()
+ {
+ return newState;
+ }
+
+ @Override
+ public String toString()
+ {
+ return MessageFormat.format("BuddyStateEvent[source={0}, oldState={1}, newState={2}]", getSource(), //$NON-NLS-1$
+ getOldState(), getNewState());
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/BuddyContainer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/BuddyContainer.java
new file mode 100644
index 0000000000..063404dca4
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/BuddyContainer.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyContainer;
+import org.eclipse.net4j.util.container.IContainerDelta;
+import org.eclipse.net4j.util.container.SingleDeltaContainerEvent;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleEvent;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyContainer extends Lifecycle implements IBuddyContainer, IListener
+{
+ private Map<String, IBuddy> buddies = new HashMap<String, IBuddy>();
+
+ public BuddyContainer(Collection<IBuddy> buddies)
+ {
+ if (buddies != null)
+ {
+ for (IBuddy buddy : buddies)
+ {
+ this.buddies.put(buddy.getUserID(), buddy);
+ buddy.addListener(this);
+ }
+ }
+ }
+
+ public BuddyContainer()
+ {
+ }
+
+ public boolean addBuddy(IBuddy buddy)
+ {
+ String userID = buddy.getUserID();
+ synchronized (buddies)
+ {
+ if (!buddies.containsKey(userID))
+ {
+ buddies.put(userID, buddy);
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new SingleDeltaContainerEvent<IBuddy>(this, buddy, IContainerDelta.Kind.ADDED), listeners);
+ }
+
+ buddy.addListener(this);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public IBuddy removeBuddy(String userID)
+ {
+ IBuddy buddy;
+ synchronized (buddies)
+ {
+ buddy = buddies.remove(userID);
+ }
+
+ if (buddy != null)
+ {
+ buddy.removeListener(this);
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new SingleDeltaContainerEvent<IBuddy>(this, buddy, IContainerDelta.Kind.REMOVED), listeners);
+ }
+ }
+
+ return buddy;
+ }
+
+ public IBuddy[] getBuddies()
+ {
+ synchronized (buddies)
+ {
+ return buddies.values().toArray(new IBuddy[buddies.size()]);
+ }
+ }
+
+ public IBuddy getBuddy(String userID)
+ {
+ synchronized (buddies)
+ {
+ return buddies.get(userID);
+ }
+ }
+
+ public IBuddy[] getElements()
+ {
+ return getBuddies();
+ }
+
+ public boolean isEmpty()
+ {
+ synchronized (buddies)
+ {
+ return buddies.isEmpty();
+ }
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() instanceof IBuddy)
+ {
+ notifyBuddyEvent(event);
+ if (event instanceof LifecycleEvent)
+ {
+ LifecycleEvent e = (LifecycleEvent)event;
+ if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ removeBuddy(((IBuddy)e.getSource()).getUserID());
+ }
+ }
+ }
+ }
+
+ protected void notifyBuddyEvent(IEvent event)
+ {
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ for (IBuddy buddy : getBuddies())
+ {
+ buddy.removeListener(this);
+ }
+
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Collaboration.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Collaboration.java
new file mode 100644
index 0000000000..040ed3ecb0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Collaboration.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.common.IFacilityInstalledEvent;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.buddies.internal.common.bundle.OM;
+import org.eclipse.net4j.buddies.internal.common.protocol.MessageNotification;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.event.Event;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Eike Stepper
+ */
+public class Collaboration extends MembershipContainer implements ICollaboration
+{
+ private long id;
+
+ private String title;
+
+ private String description;
+
+ private Visibility visibility = Visibility.PRIVATE;
+
+ private ConcurrentMap<String, IFacility> facilities = new ConcurrentHashMap<String, IFacility>();
+
+ public Collaboration(long id)
+ {
+ this.id = id;
+ }
+
+ public long getID()
+ {
+ return id;
+ }
+
+ public String getTitle()
+ {
+ return title == null ? String.valueOf(id) : title;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public Visibility getVisibility()
+ {
+ return visibility;
+ }
+
+ public boolean isPublic()
+ {
+ return visibility == Visibility.PUBLIC;
+ }
+
+ public void setPublic(String title, String description)
+ {
+ visibility = Visibility.PUBLIC;
+ this.title = title;
+ this.description = description;
+ }
+
+ public void setPrivate()
+ {
+ visibility = Visibility.PRIVATE;
+ title = null;
+ description = null;
+ }
+
+ public IMembership getMembership(IBuddy buddy)
+ {
+ return getMembership(buddy, this);
+ }
+
+ public IMembership removeMembership(IBuddy buddy)
+ {
+ return removeMembership(buddy, this);
+ }
+
+ public IBuddy getBuddy(String userID)
+ {
+ for (IMembership membership : getMemberships())
+ {
+ IBuddy buddy = membership.getBuddy();
+ if (ObjectUtil.equals(buddy.getUserID(), userID))
+ {
+ return buddy;
+ }
+ }
+
+ return null;
+ }
+
+ public IBuddy[] getBuddies()
+ {
+ List<IBuddy> buddies = new ArrayList<IBuddy>();
+ for (IMembership membership : getMemberships())
+ {
+ IBuddy buddy = membership.getBuddy();
+ buddies.add(buddy);
+ }
+
+ return buddies.toArray(new IBuddy[buddies.size()]);
+ }
+
+ public String[] getFacilityTypes()
+ {
+ return facilities.keySet().toArray(new String[facilities.size()]);
+ }
+
+ public IFacility[] getFacilities()
+ {
+ return facilities.values().toArray(new IFacility[facilities.size()]);
+ }
+
+ public IFacility getFacility(String type)
+ {
+ return facilities.get(type);
+ }
+
+ public boolean addFacility(IFacility facility, boolean remote)
+ {
+ String type = facility.getType();
+ if (!facilities.containsKey(type))
+ {
+ facilities.put(type, facility);
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new FacilityInstalledEvent(this, facility, remote), listeners);
+ }
+
+ facility.addListener(this);
+ return true;
+ }
+
+ return false;
+ }
+
+ public void sendMessage(long collaborationID, String facilityType, IMessage message)
+ {
+ IMembership[] elements = getElements();
+ for (IMembership membership : elements)
+ {
+ IBuddy receiver = membership.getBuddy();
+ if (!ObjectUtil.equals(receiver.getUserID(), message.getSenderID()))
+ {
+ try
+ {
+ SignalProtocol<?> protocol = (SignalProtocol<?>)receiver.getSession().getProtocol();
+ new MessageNotification(protocol, collaborationID, facilityType, message).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+ }
+
+ /**
+ * @see PlatformObject#getAdapter(Class)
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class adapter)
+ {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+
+ if (obj instanceof ICollaboration)
+ {
+ ICollaboration collaboration = (ICollaboration)obj;
+ return getID() == collaboration.getID();
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return ObjectUtil.hashCode(id);
+ }
+
+ @Override
+ public String toString()
+ {
+ return MessageFormat.format("{0}[{1}]", getClass().getSimpleName(), getTitle()); //$NON-NLS-1$
+ }
+
+ @Override
+ public void notifyEvent(IEvent event)
+ {
+ super.notifyEvent(event);
+ if (event.getSource() instanceof IFacility)
+ {
+ notifyFacilityEvent(event);
+ }
+ }
+
+ protected void notifyFacilityEvent(IEvent event)
+ {
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ for (IFacility facility : getFacilities())
+ {
+ facility.removeListener(this);
+ LifecycleUtil.deactivate(facility);
+ }
+
+ for (IMembership membership : getMemberships())
+ {
+ LifecycleUtil.deactivate(membership);
+ }
+
+ super.doDeactivate();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class FacilityInstalledEvent extends Event implements IFacilityInstalledEvent
+ {
+ private static final long serialVersionUID = 1L;
+
+ private IFacility facility;
+
+ private boolean remote;
+
+ public FacilityInstalledEvent(ICollaboration source, IFacility facility, boolean remote)
+ {
+ super(source);
+ this.facility = facility;
+ this.remote = remote;
+ }
+
+ @Override
+ public ICollaboration getSource()
+ {
+ return (ICollaboration)super.getSource();
+ }
+
+ public IFacility getFacility()
+ {
+ return facility;
+ }
+
+ public boolean fromRemote()
+ {
+ return remote;
+ }
+
+ @Override
+ public String toString()
+ {
+ return MessageFormat.format("FacilityInstalledEvent[source={0}, facility={1}, remote={2}]", getSource(), //$NON-NLS-1$
+ facility, remote);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/CollaborationContainer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/CollaborationContainer.java
new file mode 100644
index 0000000000..4dda2ae001
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/CollaborationContainer.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.ICollaborationContainer;
+import org.eclipse.net4j.util.container.IContainerDelta;
+import org.eclipse.net4j.util.container.SingleDeltaContainerEvent;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleEvent;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationContainer extends Lifecycle implements ICollaborationContainer, IListener
+{
+ private Map<Long, ICollaboration> collaborations = new HashMap<Long, ICollaboration>();
+
+ public CollaborationContainer(Collection<ICollaboration> collaborations)
+ {
+ if (collaborations != null)
+ {
+ for (ICollaboration collaboration : collaborations)
+ {
+ this.collaborations.put(collaboration.getID(), collaboration);
+ collaboration.addListener(this);
+ }
+ }
+ }
+
+ public CollaborationContainer()
+ {
+ }
+
+ public void addCollaboration(ICollaboration collaboration)
+ {
+ long id = collaboration.getID();
+ synchronized (collaborations)
+ {
+ if (!collaborations.containsKey(id))
+ {
+ collaborations.put(id, collaboration);
+ }
+ }
+
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new SingleDeltaContainerEvent<ICollaboration>(this, collaboration, IContainerDelta.Kind.ADDED),
+ listeners);
+ }
+
+ collaboration.addListener(this);
+ }
+
+ public ICollaboration removeCollaboration(long id)
+ {
+ ICollaboration collaboration;
+ synchronized (collaborations)
+ {
+ collaboration = collaborations.remove(id);
+ }
+
+ if (collaboration != null)
+ {
+ collaboration.removeListener(this);
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new SingleDeltaContainerEvent<ICollaboration>(this, collaboration, IContainerDelta.Kind.REMOVED),
+ listeners);
+ }
+ }
+
+ return collaboration;
+ }
+
+ public ICollaboration[] getCollaborations()
+ {
+ synchronized (collaborations)
+ {
+ return collaborations.values().toArray(new ICollaboration[collaborations.size()]);
+ }
+ }
+
+ public ICollaboration getCollaboration(long id)
+ {
+ synchronized (collaborations)
+ {
+ return collaborations.get(id);
+ }
+ }
+
+ public ICollaboration[] getElements()
+ {
+ return getCollaborations();
+ }
+
+ public boolean isEmpty()
+ {
+ synchronized (collaborations)
+ {
+ return collaborations.isEmpty();
+ }
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() instanceof ICollaboration)
+ {
+ notifyCollaborationEvent(event);
+ if (event instanceof LifecycleEvent)
+ {
+ LifecycleEvent e = (LifecycleEvent)event;
+ if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ removeCollaboration(((ICollaboration)e.getSource()).getID());
+ }
+ }
+ }
+ }
+
+ protected void notifyCollaborationEvent(IEvent event)
+ {
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ for (ICollaboration collaboration : getCollaborations())
+ {
+ collaboration.removeListener(this);
+ }
+
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Membership.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Membership.java
new file mode 100644
index 0000000000..e6315db3a4
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/Membership.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.common.IMembershipKey;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+/**
+ * @author Eike Stepper
+ */
+public class Membership extends Lifecycle implements IMembership
+{
+ private MembershipKey key;
+
+ private long startTime;
+
+ private transient Object[] elements;
+
+ private Membership(IBuddy buddy, ICollaboration collaboration)
+ {
+ key = new MembershipKey(buddy, collaboration);
+ elements = new Object[] { buddy, collaboration };
+ startTime = System.currentTimeMillis();
+ activate();
+ }
+
+ public IBuddy getBuddy()
+ {
+ return key.getBuddy();
+ }
+
+ public ICollaboration getCollaboration()
+ {
+ return key.getCollaboration();
+ }
+
+ public long getStartTime()
+ {
+ return startTime;
+ }
+
+ public Object[] getElements()
+ {
+ return elements;
+ }
+
+ public boolean isEmpty()
+ {
+ return false;
+ }
+
+ public MembershipKey getKey()
+ {
+ return key;
+ }
+
+ /**
+ * @see PlatformObject#getAdapter(Class)
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class adapter)
+ {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+
+ if (obj instanceof IMembershipKey)
+ {
+ IMembershipKey key = (IMembershipKey)obj;
+ return ObjectUtil.equals(getBuddy(), key.getBuddy())
+ && ObjectUtil.equals(getCollaboration(), key.getCollaboration());
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return key.hashCode();
+ }
+
+ @Override
+ public String toString()
+ {
+ return key.toString();
+ }
+
+ public static IMembership create(IBuddy buddy, ICollaboration collaboration)
+ {
+ Membership membership = new Membership(buddy, collaboration);
+ ((Buddy)buddy).addMembership(membership);
+ ((Collaboration)collaboration).addMembership(membership);
+ return membership;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipContainer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipContainer.java
new file mode 100644
index 0000000000..da520870b6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipContainer.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.common.IMembershipContainer;
+import org.eclipse.net4j.buddies.common.IMembershipKey;
+import org.eclipse.net4j.util.container.IContainerDelta;
+import org.eclipse.net4j.util.container.SingleDeltaContainerEvent;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Eike Stepper
+ */
+public class MembershipContainer extends Lifecycle implements IMembershipContainer, IListener
+{
+ private ConcurrentMap<IMembershipKey, IMembership> memberships = new ConcurrentHashMap<IMembershipKey, IMembership>();
+
+ public MembershipContainer()
+ {
+ }
+
+ public void addMembership(IMembership membership)
+ {
+ if (memberships.putIfAbsent(membership, membership) == null)
+ {
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new SingleDeltaContainerEvent<IMembership>(this, membership, IContainerDelta.Kind.ADDED), listeners);
+ }
+
+ membership.addListener(this);
+ }
+ }
+
+ public IMembership removeMembership(IBuddy buddy, ICollaboration collaboration)
+ {
+ return removeMembership(new MembershipKey(buddy, collaboration));
+ }
+
+ public IMembership removeMembership(IMembershipKey key)
+ {
+ // for (IMembership membership : memberships.values())
+ // {
+ //
+ // }
+ //
+ IMembership membership = memberships.remove(key);
+ if (membership != null)
+ {
+ membership.removeListener(this);
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(new SingleDeltaContainerEvent<IMembership>(this, membership, IContainerDelta.Kind.REMOVED), listeners);
+ }
+ }
+
+ return membership;
+ }
+
+ public IMembership[] getMemberships()
+ {
+ return memberships.values().toArray(new IMembership[memberships.size()]);
+ }
+
+ public IMembership getMembership(IBuddy buddy, ICollaboration collaboration)
+ {
+ return memberships.get(new MembershipKey(buddy, collaboration));
+ }
+
+ public IMembership[] getElements()
+ {
+ return getMemberships();
+ }
+
+ public boolean isEmpty()
+ {
+ return memberships.isEmpty();
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() instanceof IMembership)
+ {
+ IMembership membership = (IMembership)event.getSource();
+ notifyMembershipEvent(event);
+ if (event instanceof ILifecycleEvent)
+ {
+ ILifecycleEvent e = (ILifecycleEvent)event;
+ if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ removeMembership(membership);
+ }
+ }
+ }
+ }
+
+ protected void notifyMembershipEvent(IEvent event)
+ {
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ for (IMembership membership : getMemberships())
+ {
+ membership.removeListener(this);
+ }
+
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipKey.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipKey.java
new file mode 100644
index 0000000000..eb2119f2d8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MembershipKey.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IMembershipKey;
+import org.eclipse.net4j.util.ObjectUtil;
+
+/**
+ * @author Eike Stepper
+ */
+public class MembershipKey implements IMembershipKey
+{
+ private IBuddy buddy;
+
+ private ICollaboration collaboration;
+
+ public MembershipKey(IBuddy buddy, ICollaboration collaboration)
+ {
+ this.buddy = buddy;
+ this.collaboration = collaboration;
+ }
+
+ public IBuddy getBuddy()
+ {
+ return buddy;
+ }
+
+ public ICollaboration getCollaboration()
+ {
+ return collaboration;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+
+ if (obj instanceof IMembershipKey)
+ {
+ IMembershipKey key = (IMembershipKey)obj;
+ return ObjectUtil.equals(getBuddy(), key.getBuddy())
+ && ObjectUtil.equals(getCollaboration(), key.getCollaboration());
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return ObjectUtil.hashCode(buddy) ^ ObjectUtil.hashCode(collaboration);
+ }
+
+ @Override
+ public String toString()
+ {
+ return buddy + "(" + collaboration + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MessageEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MessageEvent.java
new file mode 100644
index 0000000000..7828824234
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/MessageEvent.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common;
+
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.buddies.common.IMessageEvent;
+import org.eclipse.net4j.util.event.Event;
+import org.eclipse.net4j.util.event.INotifier;
+
+/**
+ * @author Eike Stepper
+ */
+public final class MessageEvent extends Event implements IMessageEvent
+{
+ private static final long serialVersionUID = 1L;
+
+ private IMessage message;
+
+ public MessageEvent(INotifier notifier, IMessage message)
+ {
+ super(notifier);
+ this.message = message;
+ }
+
+ public IMessage getMessage()
+ {
+ return message;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/bundle/OM.java
new file mode 100644
index 0000000000..148e5e94fc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/bundle/OM.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.buddies.common"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_PROTOCOL = DEBUG.tracer("protocol"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_MODEL = DEBUG.tracer("model"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_REVISION = DEBUG.tracer("revision"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateIndication.java
new file mode 100644
index 0000000000..b1fc427a94
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateIndication.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy.State;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class BuddyStateIndication extends Indication
+{
+ public BuddyStateIndication(SignalProtocol<?> protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_BUDDY_STATE);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String userID = in.readString();
+ State state = ProtocolUtil.readState(in);
+ stateChanged(userID, state);
+ }
+
+ protected abstract void stateChanged(String userID, State state);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateNotification.java
new file mode 100644
index 0000000000..a9c6f85e74
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/BuddyStateNotification.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy.State;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyStateNotification extends Request
+{
+ private String userID;
+
+ private State state;
+
+ public BuddyStateNotification(SignalProtocol<?> protocol, String userID, State state)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_BUDDY_STATE);
+ this.userID = userID;
+ this.state = state;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(userID);
+ ProtocolUtil.writeState(out, state);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftIndication.java
new file mode 100644
index 0000000000..0e6a32d83c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftIndication.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddyProvider;
+import org.eclipse.net4j.buddies.common.ICollaborationProvider;
+import org.eclipse.net4j.buddies.internal.common.Buddy;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationLeftIndication extends Indication
+{
+ private IBuddyProvider buddyProvider;
+
+ private ICollaborationProvider collaborationProvider;
+
+ public CollaborationLeftIndication(SignalProtocol<?> protocol, IBuddyProvider buddyProvider,
+ ICollaborationProvider collaborationProvider)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_COLLABORATION_LEFT);
+ this.buddyProvider = buddyProvider;
+ this.collaborationProvider = collaborationProvider;
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ long collaborationID = in.readLong();
+ String userID = in.readString();
+
+ Collaboration collaboration = getCollaboration(collaborationID);
+ if (collaboration != null)
+ {
+ Buddy buddy = getBuddy(userID);
+ if (buddy != null)
+ {
+ collaborationLeft(buddy, collaboration);
+ }
+ }
+ }
+
+ protected void collaborationLeft(Buddy buddy, Collaboration collaboration)
+ {
+ collaboration.removeMembership(buddy);
+ buddy.removeMembership(collaboration);
+ }
+
+ protected Collaboration getCollaboration(long collaborationID)
+ {
+ return (Collaboration)collaborationProvider.getCollaboration(collaborationID);
+ }
+
+ protected Buddy getBuddy(String userID)
+ {
+ return (Buddy)buddyProvider.getBuddy(userID);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftNotification.java
new file mode 100644
index 0000000000..4415b7a8e3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/CollaborationLeftNotification.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationLeftNotification extends Request
+{
+ private long collaborationID;
+
+ private String userID;
+
+ public CollaborationLeftNotification(SignalProtocol<?> protocol, long collaborationID, String userID)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_COLLABORATION_LEFT);
+ this.collaborationID = collaborationID;
+ this.userID = userID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaborationID);
+ out.writeString(userID);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageIndication.java
new file mode 100644
index 0000000000..e968f371fa
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageIndication.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.ICollaborationProvider;
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.buddies.spi.common.Facility;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class MessageIndication extends Indication
+{
+ private ICollaborationProvider collaborationProvider;
+
+ public MessageIndication(SignalProtocol<?> protocol, ICollaborationProvider collaborationProvider)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_MESSAGE);
+ this.collaborationProvider = collaborationProvider;
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ long collaborationID = in.readLong();
+ String facilityType = in.readString();
+ Facility facility = getFacility(collaborationID, facilityType);
+ if (facility != null)
+ {
+ IMessage message = ProtocolUtil.readMessage(in, facility.getClass().getClassLoader());
+ facility.handleMessage(message);
+ }
+ }
+
+ private Facility getFacility(long collaborationID, String facilityType)
+ {
+ ICollaboration collaboration = collaborationProvider.getCollaboration(collaborationID);
+ if (collaboration == null)
+ {
+ return null;
+ }
+
+ return (Facility)collaboration.getFacility(facilityType);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageNotification.java
new file mode 100644
index 0000000000..19aa61a095
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/MessageNotification.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class MessageNotification extends Request
+{
+ private long collaborationID;
+
+ private String facilityType;
+
+ private IMessage message;
+
+ public MessageNotification(SignalProtocol<?> protocol, long collaborationID, String facilityType, IMessage message)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_MESSAGE);
+ this.collaborationID = collaborationID;
+ this.facilityType = facilityType;
+ this.message = message;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaborationID);
+ out.writeString(facilityType);
+ ProtocolUtil.writeMessage(out, message);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolConstants.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolConstants.java
new file mode 100644
index 0000000000..8b1827f4d6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolConstants.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ProtocolConstants
+{
+ public static final String PROTOCOL_NAME = "buddies"; //$NON-NLS-1$
+
+ public static final short SIGNAL_OPEN_SESSION = 1;
+
+ public static final short SIGNAL_LOAD_ACCOUNT = 2;
+
+ public static final short SIGNAL_BUDDY_ADDED = 3;
+
+ public static final short SIGNAL_BUDDY_REMOVED = 4;
+
+ public static final short SIGNAL_BUDDY_STATE = 5;
+
+ public static final short SIGNAL_INITIATE_COLLABORATION = 6;
+
+ public static final short SIGNAL_COLLABORATION_INITIATED = 7;
+
+ public static final short SIGNAL_COLLABORATION_LEFT = 8;
+
+ public static final short SIGNAL_INVITE_BUDDIES = 9;
+
+ public static final short SIGNAL_BUDDIES_INVITED = 10;
+
+ public static final short SIGNAL_INSTALL_FACILITY = 11;
+
+ public static final short SIGNAL_FACILITY_INSTALLED = 12;
+
+ public static final short SIGNAL_MESSAGE = 13;
+
+ public static final long TIMEOUT = 5000L;
+
+ public static final byte STATE_AVAILABLE = 1;
+
+ public static final byte STATE_LONESOME = 2;
+
+ public static final byte STATE_AWAY = 3;
+
+ public static final byte STATE_DO_NOT_DISTURB = 4;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolUtil.java
new file mode 100644
index 0000000000..61b875f995
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/internal/common/protocol/ProtocolUtil.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.common.protocol;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyContainer;
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public final class ProtocolUtil
+{
+ private ProtocolUtil()
+ {
+ }
+
+ public static void writeBuddies(ExtendedDataOutputStream out, Collection<IBuddy> buddies) throws IOException
+ {
+ if (buddies == null)
+ {
+ out.writeInt(0);
+ }
+ else
+ {
+ out.writeInt(buddies.size());
+ for (IBuddy buddy : buddies)
+ {
+ out.writeString(buddy.getUserID());
+ }
+ }
+ }
+
+ public static Set<IBuddy> readBuddies(ExtendedDataInputStream in, IBuddyContainer buddyContainer) throws IOException
+ {
+ int size = in.readInt();
+ Set<IBuddy> buddies = new HashSet<IBuddy>();
+ for (int i = 0; i < size; i++)
+ {
+ String userID = in.readString();
+ IBuddy buddy = buddyContainer.getBuddy(userID);
+ if (buddy != null)
+ {
+ buddies.add(buddy);
+ }
+ }
+
+ return buddies;
+ }
+
+ public static String[] readUserIDs(ExtendedDataInputStream in) throws IOException
+ {
+ int size = in.readInt();
+ String[] userIDs = new String[size];
+ for (int i = 0; i < size; i++)
+ {
+ userIDs[i] = in.readString();
+ }
+
+ return userIDs;
+ }
+
+ public static void writeAccount(ExtendedDataOutputStream out, IAccount account) throws IOException
+ {
+ if (account != null)
+ {
+ out.writeBoolean(true);
+ ObjectOutputStream oos = new ObjectOutputStream(out);
+ oos.writeObject(account);
+ }
+ else
+ {
+ out.writeBoolean(false);
+ }
+ }
+
+ public static IAccount readAccount(ExtendedDataInputStream in) throws IOException
+ {
+ boolean exists = in.readBoolean();
+ if (!exists)
+ {
+ return null;
+ }
+
+ try
+ {
+ ObjectInputStream ois = new ObjectInputStream(in);
+ return (IAccount)ois.readObject();
+ }
+ catch (IOException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ public static void writeState(ExtendedDataOutputStream out, IBuddy.State state) throws IOException
+ {
+ switch (state)
+ {
+ case AVAILABLE:
+ out.writeByte(ProtocolConstants.STATE_AVAILABLE);
+ break;
+
+ case LONESOME:
+ out.writeByte(ProtocolConstants.STATE_LONESOME);
+ break;
+
+ case AWAY:
+ out.writeByte(ProtocolConstants.STATE_AWAY);
+ break;
+
+ case DO_NOT_DISTURB:
+ out.writeByte(ProtocolConstants.STATE_DO_NOT_DISTURB);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Illegal state: " + state); //$NON-NLS-1$
+ }
+ }
+
+ public static IBuddy.State readState(ExtendedDataInputStream in) throws IOException
+ {
+ byte state = in.readByte();
+ switch (state)
+ {
+ case ProtocolConstants.STATE_AVAILABLE:
+ return IBuddy.State.AVAILABLE;
+
+ case ProtocolConstants.STATE_LONESOME:
+ return IBuddy.State.LONESOME;
+
+ case ProtocolConstants.STATE_AWAY:
+ return IBuddy.State.AWAY;
+
+ case ProtocolConstants.STATE_DO_NOT_DISTURB:
+ return IBuddy.State.DO_NOT_DISTURB;
+
+ default:
+ throw new IllegalArgumentException("Illegal state: " + state); //$NON-NLS-1$
+ }
+ }
+
+ public static void writeFacilityTypes(ExtendedDataOutputStream out, String[] facilityTypes) throws IOException
+ {
+ if (facilityTypes == null)
+ {
+ out.writeInt(0);
+ }
+ else
+ {
+ out.writeInt(facilityTypes.length);
+ for (String facilityType : facilityTypes)
+ {
+ out.writeString(facilityType);
+ }
+ }
+ }
+
+ public static String[] readFacilityTypes(ExtendedDataInputStream in) throws IOException
+ {
+ int size = in.readInt();
+ String[] facilityTypes = new String[size];
+ for (int i = 0; i < size; i++)
+ {
+ facilityTypes[i] = in.readString();
+ }
+
+ return facilityTypes;
+ }
+
+ public static void writeMessage(ExtendedDataOutputStream out, IMessage message) throws IOException
+ {
+ ObjectOutputStream oos = new ObjectOutputStream(out);
+ oos.writeObject(message);
+ }
+
+ public static IMessage readMessage(ExtendedDataInputStream in, final ClassLoader classLoader) throws IOException
+ {
+ try
+ {
+ ObjectInputStream ois = new ObjectInputStream(in)
+ {
+ @Override
+ protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException
+ {
+ String className = desc.getName();
+ return classLoader.loadClass(className);
+ }
+ };
+
+ return (IMessage)ois.readObject();
+ }
+ catch (IOException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ClientFacilityFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ClientFacilityFactory.java
new file mode 100644
index 0000000000..88343a122e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ClientFacilityFactory.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.spi.common;
+
+import org.eclipse.net4j.util.factory.Factory;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class ClientFacilityFactory extends Factory
+{
+ public static final String PRODUCT_GROUP = "org.eclipse.net4j.buddies.clientFacilities"; //$NON-NLS-1$
+
+ public ClientFacilityFactory(String type)
+ {
+ super(PRODUCT_GROUP, type);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Facility.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Facility.java
new file mode 100644
index 0000000000..09b3f540b1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Facility.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.spi.common;
+
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class Facility extends Lifecycle implements IFacility
+{
+ private String type;
+
+ private Collaboration collaboration;
+
+ public Facility(String type)
+ {
+ this.type = type;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public Collaboration getCollaboration()
+ {
+ return collaboration;
+ }
+
+ public void setCollaboration(ICollaboration collaboration)
+ {
+ this.collaboration = (Collaboration)collaboration;
+ }
+
+ /**
+ * @see PlatformObject#getAdapter(Class)
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class adapter)
+ {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ public void sendMessage(IMessage message)
+ {
+ collaboration.sendMessage(collaboration.getID(), type, message);
+ }
+
+ public abstract void handleMessage(IMessage message);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Message.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Message.java
new file mode 100644
index 0000000000..27fa2dd76c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/Message.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.spi.common;
+
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.util.StringUtil;
+
+import org.eclipse.core.runtime.PlatformObject;
+
+import java.io.Serializable;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class Message extends PlatformObject implements IMessage, Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private String senderID;
+
+ protected Message()
+ {
+ }
+
+ public String getSenderID()
+ {
+ return senderID;
+ }
+
+ public void setSenderID(String senderID)
+ {
+ this.senderID = senderID;
+ }
+
+ protected String encode(String text)
+ {
+ return text.replaceAll(StringUtil.NL, "\n"); //$NON-NLS-1$
+ }
+
+ protected String decode(String text)
+ {
+ return text.replaceAll("\n", StringUtil.NL); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ServerFacilityFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ServerFacilityFactory.java
new file mode 100644
index 0000000000..e98fbedf91
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.common/src/org/eclipse/net4j/buddies/spi/common/ServerFacilityFactory.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.spi.common;
+
+import org.eclipse.net4j.util.factory.Factory;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class ServerFacilityFactory extends Factory
+{
+ public static final String PRODUCT_GROUP = "org.eclipse.net4j.buddies.serverFacilities"; //$NON-NLS-1$
+
+ public ServerFacilityFactory(String type)
+ {
+ super(PRODUCT_GROUP, type);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.options b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.options
new file mode 100644
index 0000000000..a86755cbde
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.buddies.server/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.project b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.project
new file mode 100644
index 0000000000..ee60b23c3e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.buddies.server</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..64203dec4b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:55:26 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/BuddiesServer.launch b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/BuddiesServer.launch
new file mode 100644
index 0000000000..a9f9611da1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/BuddiesServer.launch
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.cdo.server.app"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="true"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.net4j,org.eclipse.net4j.buddies.server,org.eclipse.net4j.db,org.eclipse.net4j.db.derby,org.eclipse.net4j.tcp"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/BuddiesServer"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../buddies.server"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}&#13;&#10;-debug&#13;&#10;-console&#13;&#10;--launcher.XXMaxPermSize&#13;&#10;128M"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Ddebug=true&#13;&#10;-Dnet4j.config=&quot;${resource_loc:/org.eclipse.net4j.buddies.server/config}&quot;"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.equinox.http.servlet@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.core.databinding@default:default,javax.servlet@default:default,org.eclipse.core.filesystem.win32.x86@default:false,org.eclipse.help.ui@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.osgi.util@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.core.net@default:default,org.eclipse.osgi@default:default,org.eclipse.ui@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.ui.intro.universal@default:default,org.eclipse.jface@default:default,org.eclipse.ui.views@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.equinox.app@default:default,org.apache.lucene.analysis@default:default,org.eclipse.ui.win32@default:false,org.eclipse.update.core@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.update.ui@default:default,org.eclipse.text@default:default,org.eclipse.core.variables@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.apache.commons.logging@default:default,org.eclipse.core.expressions@default:default,org.apache.lucene@default:default,org.eclipse.ui.intro@default:default,org.eclipse.platform@default:default,org.eclipse.jface.text@default:default,org.eclipse.help@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.resources.compatibility@default:false,org.eclipse.ui.forms@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.ant.core@default:default,org.eclipse.osgi.services@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.update.configurator@default:default,com.ibm.icu@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.help.base@default:default,org.eclipse.swt@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.equinox.registry@default:default,org.eclipse.core.resources@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.net4j.buddies.chat@default:default,org.eclipse.net4j.util@default:default,org.eclipse.emf.cdo.common@default:default,org.eclipse.emf.cdo.server@default:default,org.eclipse.net4j.buddies.server@default:default,org.eclipse.net4j.buddies.common@default:default,org.eclipse.net4j.db@default:default,org.eclipse.net4j.db.hsqldb@default:default,org.eclipse.net4j.db.derby@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.net4j@default:default,org.eclipse.net4j.db.mysql@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..a5c3e6404d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.buddies.server;singleton:=true
+Bundle-Version: 4.0.100.qualifier
+Bundle-Vendor: %providerName
+Bundle-Activator: org.eclipse.net4j.buddies.internal.server.bundle.OM$Activator
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)";resolution:=optional,
+ org.eclipse.net4j.buddies.common;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Export-Package: org.eclipse.net4j.buddies.internal.server;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.internal.server.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.internal.server.messages;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.internal.server.protocol;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.server;version="4.0.100"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.ini b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.ini
new file mode 100644
index 0000000000..b7e87ca285
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.mappings b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.mappings
new file mode 100644
index 0000000000..bddaab4310
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@ \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.properties
new file mode 100644
index 0000000000..60fd204dbf
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/about.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = Net4j Buddies Server
+featureText = Net4j Buddies Server\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others. All rights reserved.\n\
+\n\
+Visit http://wiki.eclipse.org/Net4j
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/build.properties
new file mode 100644
index 0000000000..7fc5e88ba9
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/build.properties
@@ -0,0 +1,29 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = .,\
+ META-INF/,\
+ plugin.properties,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ plugin.xml,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ modeling32.png
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/config/cdo-server.xml b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/config/cdo-server.xml
new file mode 100644
index 0000000000..06282d70e7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/config/cdo-server.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cdoServer>
+
+ <acceptor type="tcp" listenAddr="0.0.0.0" port="2036">
+ <!--
+ <negotiator type="challenge" description="/temp/users.db"/>
+ -->
+ </acceptor>
+
+</cdoServer>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/modeling32.png b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/modeling32.png
new file mode 100644
index 0000000000..6b08de2ada
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.properties
new file mode 100644
index 0000000000..37832925b1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Buddies Server
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.xml b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.xml
new file mode 100644
index 0000000000..cbef80e5e2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension
+ point="org.eclipse.net4j.util.factories">
+ <factory
+ class="org.eclipse.net4j.buddies.internal.server.protocol.BuddiesServerProtocol$Factory"
+ productGroup="org.eclipse.net4j.serverProtocols"
+ type="buddies"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java
new file mode 100644
index 0000000000..18ebce26a6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyStateEvent;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.common.Account;
+import org.eclipse.net4j.buddies.internal.common.Buddy;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.buddies.internal.common.CollaborationContainer;
+import org.eclipse.net4j.buddies.internal.common.Membership;
+import org.eclipse.net4j.buddies.internal.common.protocol.BuddyStateNotification;
+import org.eclipse.net4j.buddies.internal.server.bundle.OM;
+import org.eclipse.net4j.buddies.internal.server.protocol.BuddiesServerProtocol;
+import org.eclipse.net4j.buddies.internal.server.protocol.BuddyRemovedNotification;
+import org.eclipse.net4j.buddies.internal.server.protocol.CollaborationInitiatedNotification;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+import org.eclipse.net4j.buddies.spi.common.ServerFacilityFactory;
+import org.eclipse.net4j.channel.IChannel;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin
+{
+ public static final BuddyAdmin INSTANCE = new BuddyAdmin();
+
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, BuddyAdmin.class);
+
+ private ConcurrentMap<String, IAccount> accounts = new ConcurrentHashMap<String, IAccount>();
+
+ private ConcurrentMap<String, ISession> sessions = new ConcurrentHashMap<String, ISession>();
+
+ private long lastCollaborationID;
+
+ public BuddyAdmin()
+ {
+ activate();
+ }
+
+ public Map<String, IAccount> getAccounts()
+ {
+ return accounts;
+ }
+
+ public ISession getSession(IBuddy buddy)
+ {
+ return getSession(buddy.getUserID());
+ }
+
+ public ISession getSession(String userID)
+ {
+ return sessions.get(userID);
+ }
+
+ public ISession[] getSessions()
+ {
+ return sessions.values().toArray(new ISession[sessions.size()]);
+ }
+
+ public IBuddy[] getBuddies()
+ {
+ List<IBuddy> buddies = new ArrayList<IBuddy>();
+ for (ISession session : sessions.values())
+ {
+ buddies.add(session.getSelf());
+ }
+
+ return buddies.toArray(new IBuddy[buddies.size()]);
+ }
+
+ public IBuddy getBuddy(String userID)
+ {
+ ISession session = getSession(userID);
+ if (session == null)
+ {
+ return null;
+ }
+
+ return session.getSelf();
+ }
+
+ public synchronized ISession openSession(IChannel channel, String userID, String password, String[] facilityTypes)
+ {
+ if (sessions.containsKey(userID))
+ {
+ return null;
+ }
+
+ IAccount account = accounts.get(userID);
+ if (account != null)
+ {
+ if (!account.authenticate(password))
+ {
+ return null;
+ }
+ }
+ else
+ {
+ account = new Account(userID, password);
+ accounts.put(userID, account);
+ }
+
+ ServerBuddy buddy = new ServerBuddy(account, facilityTypes);
+ buddy.activate();
+ buddy.addListener(this);
+
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)channel.getReceiveHandler();
+ ServerSession session = new ServerSession(protocol, buddy);
+ protocol.setInfraStructure(session);
+ session.addListener(this);
+ buddy.setSession(session);
+ LifecycleUtil.activate(session);
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Opened session: " + userID); //$NON-NLS-1$
+ }
+
+ sessions.put(userID, session);
+ return session;
+ }
+
+ public ICollaboration initiateCollaboration(IBuddy initiator, String... userIDs)
+ {
+ long collaborationID;
+ synchronized (this)
+ {
+ collaborationID = ++lastCollaborationID;
+ }
+
+ Collaboration collaboration = new Collaboration(collaborationID);
+ collaboration.activate();
+ Membership.create(initiator, collaboration);
+
+ Set<IBuddy> buddies = new HashSet<IBuddy>();
+ buddies.add(initiator);
+ for (String userID : userIDs)
+ {
+ Buddy buddy = (Buddy)getBuddy(userID);
+ if (buddy != null)
+ {
+ buddies.add(buddy);
+ Membership.create(buddy, collaboration);
+ }
+ }
+
+ addCollaboration(collaboration);
+
+ Set<IBuddy> invitations = new HashSet<IBuddy>(buddies);
+ for (IBuddy buddy : buddies)
+ {
+ if (buddy != initiator)
+ {
+ try
+ {
+ invitations.remove(buddy);
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol();
+ new CollaborationInitiatedNotification(protocol, collaborationID, invitations, null).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ finally
+ {
+ invitations.add(buddy);
+ }
+ }
+ }
+
+ return collaboration;
+ }
+
+ @Override
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() instanceof ServerSession)
+ {
+ if (event instanceof ILifecycleEvent)
+ {
+ if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ String userID = ((ServerSession)event.getSource()).getSelf().getUserID();
+ synchronized (this)
+ {
+ ServerSession removed = (ServerSession)sessions.remove(userID);
+ if (removed != null)
+ {
+ removed.removeListener(this);
+ removed.getSelf().removeListener(this);
+ for (ISession session : sessions.values())
+ {
+ try
+ {
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)session.getProtocol();
+ new BuddyRemovedNotification(protocol, userID).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (event.getSource() instanceof ServerBuddy)
+ {
+ if (event instanceof IBuddyStateEvent)
+ {
+ IBuddyStateEvent e = (IBuddyStateEvent)event;
+ synchronized (this)
+ {
+ for (ISession session : sessions.values())
+ {
+ try
+ {
+ if (!ObjectUtil.equals(session.getSelf(), e.getSource()))
+ {
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)session.getProtocol();
+ new BuddyStateNotification(protocol, e.getSource().getUserID(), e.getNewState()).sendAsync();
+ }
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static Set<String> getFacilityTypes()
+ {
+ return IPluginContainer.INSTANCE.getFactoryTypes(ServerFacilityFactory.PRODUCT_GROUP);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java
new file mode 100644
index 0000000000..cdb6a2a4ef
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.common.Buddy;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerBuddy extends Buddy
+{
+ private IAccount account;
+
+ public ServerBuddy(IAccount account, String[] facilityTypes)
+ {
+ super(null, new HashSet<String>(Arrays.asList(facilityTypes)));
+ this.account = account;
+ }
+
+ public String getUserID()
+ {
+ return account.getUserID();
+ }
+
+ public IAccount getAccount()
+ {
+ return account;
+ }
+
+ public IMembership[] initiate(Collection<IBuddy> buddies)
+ {
+ // TODO Implement method ServerBuddy.initiate()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+
+ public IMembership join(long collaborationID)
+ {
+ // TODO Implement method ServerBuddy.join()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+
+ public IMembership join(Object invitationToken)
+ {
+ // TODO Implement method ServerBuddy.join()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java
new file mode 100644
index 0000000000..d1fb2b17e6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.server.protocol.BuddiesServerProtocol;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.log.OMLogger;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerSession extends Lifecycle implements ISession, IListener
+{
+ private BuddiesServerProtocol protocol;
+
+ private IBuddy self;
+
+ /**
+ * @since 2.0
+ */
+ public ServerSession(BuddiesServerProtocol protocol, IBuddy self)
+ {
+ this.protocol = protocol;
+ this.self = self;
+ }
+
+ /**
+ * @since 2.0
+ */
+ public BuddiesServerProtocol getProtocol()
+ {
+ return protocol;
+ }
+
+ public IBuddy getSelf()
+ {
+ return self;
+ }
+
+ public void close()
+ {
+ protocol.close();
+ protocol = null;
+ LifecycleUtil.deactivate(this, OMLogger.Level.DEBUG);
+ }
+
+ /**
+ * @see PlatformObject#getAdapter(Class)
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class adapter)
+ {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() == protocol)
+ {
+ if (event instanceof ILifecycleEvent)
+ {
+ if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ deactivate();
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ protocol.addListener(this);
+ self.getAccount().touch();
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ self.getAccount().touch();
+ protocol.removeListener(this);
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/bundle/OM.java
new file mode 100644
index 0000000000..b68c3a4c25
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/bundle/OM.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.bundle;
+
+import org.eclipse.net4j.buddies.internal.server.BuddyAdmin;
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.buddies.server"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_PROTOCOL = DEBUG.tracer("protocol"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_REPOSITORY = DEBUG.tracer("repository"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_SESSION = DEBUG.tracer("session"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_REVISION = DEBUG.tracer("revision"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_RESOURCE = DEBUG.tracer("resource"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_STORE = DEBUG.tracer("store"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_TYPES = DEBUG.tracer("types"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+
+ @Override
+ protected void doStop() throws Exception
+ {
+ BuddyAdmin.INSTANCE.deactivate();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/Messages.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/Messages.java
new file mode 100644
index 0000000000..99e76b786e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/Messages.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Victor Roldan Betancort - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.net4j.buddies.internal.server.messages;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.net4j.buddies.internal.server.messages.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/messages.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/messages.properties
new file mode 100644
index 0000000000..f7c5d2df50
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/messages/messages.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Victor Roldan Betancort - initial API and implementation
+# Eike Stepper - maintenance
+
+OpenSessionIndication.0=User denied {0}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddiesServerProtocol.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddiesServerProtocol.java
new file mode 100644
index 0000000000..369f259eda
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddiesServerProtocol.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.MessageIndication;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.server.ServerSession;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.signal.SignalReactor;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+/**
+ * @author Eike Stepper
+ * @since 2.0
+ */
+public class BuddiesServerProtocol extends SignalProtocol<ServerSession>
+{
+ public BuddiesServerProtocol()
+ {
+ super(ProtocolConstants.PROTOCOL_NAME);
+ }
+
+ @Override
+ protected SignalReactor createSignalReactor(short signalID)
+ {
+ switch (signalID)
+ {
+ case ProtocolConstants.SIGNAL_OPEN_SESSION:
+ return new OpenSessionIndication(this);
+
+ case ProtocolConstants.SIGNAL_LOAD_ACCOUNT:
+ return new LoadAccountIndication(this);
+
+ case ProtocolConstants.SIGNAL_BUDDY_STATE:
+ return new ServerBuddyStateIndication(this);
+
+ case ProtocolConstants.SIGNAL_INSTALL_FACILITY:
+ return new InstallFacilityIndication(this);
+
+ case ProtocolConstants.SIGNAL_INITIATE_COLLABORATION:
+ return new InitiateCollaborationIndication(this);
+
+ case ProtocolConstants.SIGNAL_INVITE_BUDDIES:
+ return new InviteBuddiesIndication(this);
+
+ case ProtocolConstants.SIGNAL_COLLABORATION_LEFT:
+ return new ServerCollaborationLeftIndication(this);
+
+ case ProtocolConstants.SIGNAL_MESSAGE:
+ return new MessageIndication(this, IBuddyAdmin.INSTANCE);
+
+ default:
+ return super.createSignalReactor(signalID);
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class Factory extends org.eclipse.spi.net4j.ServerProtocolFactory
+ {
+ public Factory()
+ {
+ super(ProtocolConstants.PROTOCOL_NAME);
+ }
+
+ public BuddiesServerProtocol create(String description)
+ {
+ return new BuddiesServerProtocol();
+ }
+
+ public static BuddiesServerProtocol get(IManagedContainer container, String description)
+ {
+ return (BuddiesServerProtocol)container.getElement(PRODUCT_GROUP, ProtocolConstants.PROTOCOL_NAME, description);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java
new file mode 100644
index 0000000000..130f6a31f3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyAddedNotification extends Request
+{
+ private String buddy;
+
+ /**
+ * @since 2.0
+ */
+ public BuddyAddedNotification(SignalProtocol<?> protocol, String buddy)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_BUDDY_ADDED);
+ this.buddy = buddy;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(buddy);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java
new file mode 100644
index 0000000000..9ae054f5e6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyRemovedNotification extends Request
+{
+ private String buddy;
+
+ /**
+ * @since 2.0
+ */
+ public BuddyRemovedNotification(SignalProtocol<?> protocol, String buddy)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_BUDDY_REMOVED);
+ this.buddy = buddy;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(buddy);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java
new file mode 100644
index 0000000000..2b92a0e5c2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.util.Collection;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationInitiatedNotification extends Request
+{
+ private long collaborationID;
+
+ private Collection<IBuddy> buddies;
+
+ private String[] facilityTypes;
+
+ /**
+ * @since 2.0
+ */
+ public CollaborationInitiatedNotification(BuddiesServerProtocol protocol, long collaborationID,
+ Collection<IBuddy> buddies, String[] facilityTypes)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_COLLABORATION_INITIATED);
+ this.collaborationID = collaborationID;
+ this.buddies = buddies;
+ this.facilityTypes = facilityTypes;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaborationID);
+ ProtocolUtil.writeBuddies(out, buddies);
+ ProtocolUtil.writeFacilityTypes(out, facilityTypes);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java
new file mode 100644
index 0000000000..1c2e35f54f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class FacilityInstalledNotification extends Request
+{
+ private long collaborationID;
+
+ private String facilityType;
+
+ /**
+ * @since 2.0
+ */
+ public FacilityInstalledNotification(BuddiesServerProtocol protocol, long collaborationID, String facilityType)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_FACILITY_INSTALLED);
+ this.collaborationID = collaborationID;
+ this.facilityType = facilityType;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaborationID);
+ out.writeString(facilityType);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java
new file mode 100644
index 0000000000..4ccd2d1070
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class InitiateCollaborationIndication extends IndicationWithResponse
+{
+ private ICollaboration collaboration;
+
+ /**
+ * @since 2.0
+ */
+ public InitiateCollaborationIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_INITIATE_COLLABORATION);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String[] userIDs = ProtocolUtil.readUserIDs(in);
+ ISession session = (ISession)getProtocol().getInfraStructure();
+ IBuddy initiator = session.getSelf();
+ collaboration = IBuddyAdmin.INSTANCE.initiateCollaboration(initiator, userIDs);
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaboration.getID());
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java
new file mode 100644
index 0000000000..34d449adf3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.server.BuddyAdmin;
+import org.eclipse.net4j.buddies.internal.server.bundle.OM;
+import org.eclipse.net4j.buddies.spi.common.ServerFacilityFactory;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class InstallFacilityIndication extends IndicationWithResponse
+{
+ private static final String FACILITY_GROUP = ServerFacilityFactory.PRODUCT_GROUP;
+
+ private boolean success;
+
+ /**
+ * @since 2.0
+ */
+ public InstallFacilityIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_INSTALL_FACILITY);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ long collaborationID = in.readLong();
+ String facilityType = in.readString();
+
+ try
+ {
+ String description = String.valueOf(collaborationID);
+ IFacility facility = (IFacility)IPluginContainer.INSTANCE.getElement(FACILITY_GROUP, facilityType, description);
+
+ Collaboration collaboration = (Collaboration)BuddyAdmin.INSTANCE.getCollaboration(collaborationID);
+ if (collaboration != null)
+ {
+ facility.setCollaboration(collaboration);
+ collaboration.addFacility(facility, true);
+
+ ISession session = (ISession)getProtocol().getInfraStructure();
+ IBuddy initiator = session.getSelf();
+
+ for (IBuddy buddy : collaboration.getBuddies())
+ {
+ if (buddy != initiator)
+ {
+ try
+ {
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol();
+ new FacilityInstalledNotification(protocol, collaborationID, facilityType).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+
+ success = true;
+ }
+ }
+ catch (RuntimeException ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeBoolean(success);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java
new file mode 100644
index 0000000000..269d577eb2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.buddies.internal.common.Membership;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.buddies.internal.server.BuddyAdmin;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class InviteBuddiesIndication extends Indication
+{
+ /**
+ * @since 2.0
+ */
+ public InviteBuddiesIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_INVITE_BUDDIES);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ long collaborationID = in.readLong();
+ String[] userIDs = ProtocolUtil.readUserIDs(in);
+
+ Collaboration collaboration = (Collaboration)BuddyAdmin.INSTANCE.getCollaboration(collaborationID);
+ if (collaboration != null)
+ {
+ Set<IBuddy> added = new HashSet<IBuddy>();
+ for (String userID : userIDs)
+ {
+ IBuddy buddy = BuddyAdmin.INSTANCE.getBuddy(userID);
+ if (buddy != null && collaboration.getMembership(buddy) == null)
+ {
+ Membership.create(buddy, collaboration);
+ added.add(buddy);
+ }
+ }
+
+ List<IBuddy> buddies = Arrays.asList(collaboration.getBuddies());
+ for (IBuddy buddy : buddies)
+ {
+ String[] facilityTypes = null;
+ Set<IBuddy> set = new HashSet<IBuddy>();
+ if (added.contains(buddy))
+ {
+ set.addAll(buddies);
+ set.remove(buddy);
+ facilityTypes = collaboration.getFacilityTypes();
+ }
+ else
+ {
+ set.addAll(added);
+ }
+
+ if (!set.isEmpty())
+ {
+ try
+ {
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol();
+ new CollaborationInitiatedNotification(protocol, collaborationID, set, facilityTypes).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/LoadAccountIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/LoadAccountIndication.java
new file mode 100644
index 0000000000..8a3ac387df
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/LoadAccountIndication.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class LoadAccountIndication extends IndicationWithResponse
+{
+ private IAccount account;
+
+ /**
+ * @since 2.0
+ */
+ public LoadAccountIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_LOAD_ACCOUNT);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String userID = in.readString();
+ account = IBuddyAdmin.INSTANCE.getAccounts().get(userID);
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ ProtocolUtil.writeAccount(out, account);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java
new file mode 100644
index 0000000000..304c9be517
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.buddies.internal.server.bundle.OM;
+import org.eclipse.net4j.buddies.internal.server.messages.Messages;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class OpenSessionIndication extends IndicationWithResponse
+{
+ private IAccount account;
+
+ private IBuddy[] buddies;
+
+ /**
+ * @since 2.0
+ */
+ public OpenSessionIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_OPEN_SESSION);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String userID = in.readString();
+ String password = in.readString();
+ int size = in.readInt();
+ String[] facilityTypes = new String[size];
+ for (int i = 0; i < size; i++)
+ {
+ facilityTypes[i] = in.readString();
+ }
+
+ synchronized (IBuddyAdmin.INSTANCE)
+ {
+ buddies = IBuddyAdmin.INSTANCE.getBuddies();
+ ISession session = IBuddyAdmin.INSTANCE.openSession(getProtocol().getChannel(), userID, password, facilityTypes);
+ if (session != null)
+ {
+ account = session.getSelf().getAccount();
+ }
+ else
+ {
+ OM.LOG.info(MessageFormat.format(Messages.getString("OpenSessionIndication.0"), userID)); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ ProtocolUtil.writeAccount(out, account);
+ if (account != null)
+ {
+ List<BuddiesServerProtocol> protocols = new ArrayList<BuddiesServerProtocol>();
+ out.writeInt(buddies.length);
+ for (IBuddy buddy : buddies)
+ {
+ out.writeString(buddy.getUserID());
+ ISession buddySession = IBuddyAdmin.INSTANCE.getSession(buddy);
+ if (buddySession != null)
+ {
+ protocols.add((BuddiesServerProtocol)buddySession.getProtocol());
+ }
+ }
+
+ for (BuddiesServerProtocol protocol : protocols)
+ {
+ try
+ {
+ new BuddyAddedNotification(protocol, account.getUserID()).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerBuddyStateIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerBuddyStateIndication.java
new file mode 100644
index 0000000000..1d4525d898
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerBuddyStateIndication.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy.State;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.common.protocol.BuddyStateIndication;
+import org.eclipse.net4j.buddies.internal.server.ServerBuddy;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerBuddyStateIndication extends BuddyStateIndication
+{
+ /**
+ * @since 2.0
+ */
+ public ServerBuddyStateIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol);
+ }
+
+ @Override
+ protected void stateChanged(String userID, State state)
+ {
+ synchronized (IBuddyAdmin.INSTANCE)
+ {
+ ISession session = IBuddyAdmin.INSTANCE.getSession(userID);
+ if (session != null)
+ {
+ ServerBuddy buddy = (ServerBuddy)session.getSelf();
+ buddy.setState(state);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java
new file mode 100644
index 0000000000..045226e5f8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.server.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.common.Buddy;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.buddies.internal.common.protocol.CollaborationLeftIndication;
+import org.eclipse.net4j.buddies.internal.common.protocol.CollaborationLeftNotification;
+import org.eclipse.net4j.buddies.internal.server.BuddyAdmin;
+import org.eclipse.net4j.buddies.server.IBuddyAdmin;
+import org.eclipse.net4j.util.WrappedException;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerCollaborationLeftIndication extends CollaborationLeftIndication
+{
+ /**
+ * @since 2.0
+ */
+ public ServerCollaborationLeftIndication(BuddiesServerProtocol protocol)
+ {
+ super(protocol, IBuddyAdmin.INSTANCE, IBuddyAdmin.INSTANCE);
+ }
+
+ @Override
+ protected void collaborationLeft(Buddy buddy, Collaboration collaboration)
+ {
+ for (IMembership membership : collaboration.getMemberships())
+ {
+ IBuddy member = membership.getBuddy();
+ if (member != buddy)
+ {
+ try
+ {
+ BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol();
+ new CollaborationLeftNotification(protocol, collaboration.getID(), buddy.getUserID()).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+ }
+
+ super.collaborationLeft(buddy, collaboration);
+ if (collaboration.getBuddies().length == 0 && !collaboration.isPublic())
+ {
+ BuddyAdmin.INSTANCE.removeCollaboration(collaboration.getID());
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java
new file mode 100644
index 0000000000..57b330abe9
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.server;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyProvider;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.ICollaborationContainer;
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.common.ISessionProvider;
+import org.eclipse.net4j.buddies.internal.server.BuddyAdmin;
+import org.eclipse.net4j.channel.IChannel;
+
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddyAdmin extends ICollaborationContainer, IBuddyProvider, ISessionProvider
+{
+ public static final IBuddyAdmin INSTANCE = BuddyAdmin.INSTANCE;
+
+ public Map<String, IAccount> getAccounts();
+
+ public ISession openSession(IChannel channel, String userID, String password, String[] facilityTypes);
+
+ public ICollaboration initiateCollaboration(IBuddy initiator, String... userIDs);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/ServerConstants.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/ServerConstants.java
new file mode 100644
index 0000000000..02a51a1cb5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.server/src/org/eclipse/net4j/buddies/server/ServerConstants.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.server;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ServerConstants
+{
+ public static final String TYPE = ProtocolConstants.PROTOCOL_NAME + "server"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.options b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.options
new file mode 100644
index 0000000000..0210f13b23
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.buddies.ui/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.project b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.project
new file mode 100644
index 0000000000..08da25a3b5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.buddies.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..4b2f26f957
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 13:02:30 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient1.launch b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient1.launch
new file mode 100644
index 0000000000..abbe02696b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient1.launch
@@ -0,0 +1,471 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.net4j,org.eclipse.net4j.buddies,org.eclipse.net4j.buddies.common,org.eclipse.net4j.buddies.ui,org.eclipse.net4j.tcp,org.eclipse.net4j.ui,org.eclipse.net4j.util,org.eclipse.net4j.util.ui"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/BuddiesClient1"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="${workspace_loc}/../buddies.client1"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosplash&#13;&#10;-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.aspectj.tracing.debug=false&#13;&#10;-Xms40m&#13;&#10;-Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<stringAttribute key="selectedPlugin" value="org.eclipse.net4j.buddies.common"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.emf.exporter,org.eclipse.ui.navigator.resources,org.eclipse.emf.ecore.editor,org.eclipse.equinox.launcher,org.eclipse.emf.mapping.ui,org.eclipse.jface.text,javax.servlet.jsp,org.eclipse.core.filesystem,org.eclipse.equinox.jsp.jasper.registry,org.eclipse.xsd.cheatsheets,org.eclipse.pde,org.eclipse.emf.ecore,org.eclipse.jdt.compiler.apt,org.eclipse.ui.forms,org.eclipse.emf.converter,org.eclipse.jface.databinding,org.eclipse.jdt.junit,org.eclipse.jdt.launching,org.apache.lucene.analysis,org.eclipse.emf.source,org.eclipse.jdt,org.eclipse.xsd.edit,org.eclipse.ui.win32,org.eclipse.core.commands,org.eclipse.ui.intro,org.eclipse.core.runtime,org.junit4,org.eclipse.help.base,org.eclipse.core.expressions,org.eclipse.pde.doc.user,org.eclipse.emf.mapping.ecore2xml.ui,org.eclipse.xsd.ecore.importer,org.eclipse.ui.editors,org.eclipse.emf.codegen.ecore.ui,org.eclipse.jdt.doc.isv,org.eclipse.emf.common.ui,org.eclipse.equinox.preferences,org.eclipse.platform.doc.isv,org.eclipse.core.boot,org.apache.ant,org.eclipse.emf.cheatsheets,org.eclipse.update.scheduler,org.eclipse.core.filebuffers,org.eclipse.debug.ui,org.eclipse.emf.mapping.ecore2ecore.editor,org.eclipse.help.ui,org.eclipse.core.net,org.eclipse.emf.codegen.ui,org.eclipse.equinox.http.registry,org.eclipse.team.cvs.ssh2,org.eclipse.emf.common,javax.servlet,org.eclipse.ui.views,org.eclipse.emf.mapping,org.eclipse.xsd.source,org.eclipse.cvs,org.eclipse.equinox.registry,com.ibm.icu,org.eclipse.text,org.eclipse.swt.win32.win32.x86,org.eclipse.ant.ui,org.apache.commons.logging,org.eclipse.cvs.source,org.eclipse.ant.core,org.eclipse.swt,org.eclipse.jdt.junit4.runtime,org.eclipse.pde.build,org.eclipse.team.cvs.ui,org.eclipse.emf.codegen,org.eclipse.ui.presentations.r21,org.eclipse.emf.ecore.xmi,org.eclipse.ui.externaltools,org.eclipse.sdk,org.eclipse.debug.core,org.eclipse.rcp,org.eclipse.core.jobs,org.eclipse.pde.ui,org.eclipse.emf.mapping.xsd2ecore,org.eclipse.core.resources.compatibility,org.apache.lucene,org.eclipse.emf.edit.ui,org.eclipse.ui.browser,org.eclipse.xsd.ecore.exporter,org.eclipse.equinox.common,org.eclipse.ui.intro.universal,org.eclipse.search,org.eclipse.equinox.http.servlet,org.eclipse.compare,org.eclipse.emf.mapping.ecore2xml,org.eclipse.pde.junit.runtime,org.eclipse.core.contenttype,org.eclipse.emf.ecore.sdo.source,org.eclipse.core.variables,org.eclipse.platform.source,org.eclipse.pde.runtime,org.eclipse.ui.workbench.compatibility,org.eclipse.emf.ant,org.eclipse.emf.ecore.sdo,org.eclipse.help,org.eclipse.jdt.junit.runtime,org.eclipse.jdt.doc.user,org.mortbay.jetty,org.eclipse.ltk.core.refactoring,org.eclipse.equinox.app,org.eclipse.update.configurator,org.eclipse.jdt.compiler.tool,org.apache.jasper,org.eclipse.team.cvs.ssh,org.eclipse.emf.mapping.ecore2ecore,org.eclipse.team.core,org.eclipse.emf,org.eclipse.emf.ecore.change,org.eclipse.help.webapp,org.eclipse.emf.edit,org.eclipse.osgi.services,org.eclipse.emf.ecore.edit,org.eclipse.ui.ide.application,org.eclipse.core.runtime.compatibility.registry,org.eclipse.jdt.core.manipulation,org.eclipse.ui.workbench.texteditor,org.eclipse.xsd.doc,org.eclipse.ui.ide,org.eclipse.team.cvs.core,org.eclipse.emf.mapping.xsd2ecore.editor,org.eclipse.pde.ui.templates,org.eclipse.ui.cheatsheets,org.eclipse.jdt.core,org.eclipse.ui.console,org.eclipse.osgi,org.eclipse.emf.codegen.ecore,org.eclipse.core.runtime.compatibility.auth,org.eclipse.pde.core,org.eclipse.update.core.win32,org.eclipse.emf.importer.ecore,org.eclipse.emf.commonj.sdo,org.eclipse.jdt.debug.ui,org.eclipse.emf.importer,org.eclipse.core.databinding,org.eclipse.emf.importer.rose,org.eclipse.update.core,org.eclipse.emf.ecore.sdo.doc,org.apache.commons.el,org.eclipse.team.ui,org.eclipse.jdt.ui,org.eclipse.ui.navigator,org.eclipse.equinox.launcher.win32.win32.x86,org.eclipse.equinox.http.jetty,org.eclipse.ui.views.properties.tabbed,org.eclipse.ltk.ui.refactoring,org.eclipse.jdt.debug,org.eclipse.emf.ecore.sdo.editor,org.eclipse.core.filesystem.win32.x86,org.eclipse.osgi.util,org.eclipse.platform,org.eclipse.xsd.editor,org.eclipse.core.resources,org.eclipse.update.ui,com.jcraft.jsch,org.eclipse.core.databinding.beans,org.eclipse.jface,org.eclipse.emf.importer.java,org.eclipse.xsd,org.eclipse.core.runtime.compatibility,org.eclipse.pde.source,org.eclipse.jsch.core,org.junit,org.eclipse.jdt.source,org.eclipse.emf.ecore.sdo.edit,org.eclipse.emf.doc,org.eclipse.equinox.jsp.jasper,org.eclipse.help.appserver,org.eclipse.ui,org.eclipse.emf.ecore.change.edit,org.eclipse.rcp.source,org.eclipse.ui.workbench"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.net4j.buddies,org.eclipse.net4j.util.ui,org.eclipse.net4j.buddies.chat.ui,org.eclipse.net4j.tcp,org.eclipse.net4j.ui,org.eclipse.net4j.buddies.ui,org.eclipse.ant.optional.junit,org.eclipse.net4j.util,org.eclipse.net4j.buddies.chat,org.eclipse.net4j.buddies.common,org.eclipse.net4j"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugtoolbar" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/actioncontributor/debugstatusfields" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/contentOutline" value="false"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/preferences-properties" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/detection" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertySheet" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.session" value="true"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/format" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/evaluation" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/trace" value="true"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structureddocument" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/gotoNextAnnotation" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.types" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.emf.validation/debug/parsers" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/overalltime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/state" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorerDecoration/trace" value="true"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/disabled" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugpopup" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
+<mapEntry key="org.eclipse.net4j/perf" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug" value="true"/>
+<mapEntry key="org.eclipse.jet/debug/projectBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/modelmanager" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/log" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugmenu" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/modelstatelistener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity.sqm.core/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/job" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentmanager" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/traceTagExecution" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/transactions" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertyChangeUpdateActionContributionItem" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/readtime" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.jet/debug/pluginBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.model" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/listeners" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.util" value="true"/>
+<mapEntry key="org.eclipse.wst.dtd.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/additionalBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerjob" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling/showProblems" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentcache" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/transferbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/cache" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.help/debug/protocols" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.jet/debug/savedState" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/registry" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.object" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidators" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/xml" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/bundleLoading" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.emf.query/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jet/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/contributetime" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/locking" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/providers" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/plugin/log" value="true"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/lifecyclelistener" value="false"/>
+<mapEntry key="org.eclipse.emf.query/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/modelmanagement" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/ext/xpathFunctions" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.adapter" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.view" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.datatools.connectivity/connectionprofileextension" value="false"/>
+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time/criteria" value="10"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity/debug" value="true"/>
+<mapEntry key="org.eclipse.jet/debug/modelLoaderExtensions" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/elementstatelistener" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.revision" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/editor/log" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/evaluation" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/xpath/compilations" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.model" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/pluginProjectMonitor" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/locks" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.emf.ocl/debug" value="true"/>
+</mapAttribute>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient2.launch b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient2.launch
new file mode 100644
index 0000000000..20c8b69e60
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient2.launch
@@ -0,0 +1,470 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.net4j,org.eclipse.net4j.buddies,org.eclipse.net4j.buddies.common,org.eclipse.net4j.buddies.ui,org.eclipse.net4j.tcp,org.eclipse.net4j.ui,org.eclipse.net4j.util,org.eclipse.net4j.util.ui"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/BuddiesClient2"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="${workspace_loc}/../buddies.client2"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosplash&#13;&#10;-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.aspectj.tracing.debug=false&#13;&#10;-Xms40m&#13;&#10;-Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<stringAttribute key="selectedPlugin" value="org.eclipse.net4j.buddies.common"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu,com.jcraft.jsch,javax.servlet,javax.servlet.jsp,org.apache.ant,org.apache.commons.el,org.apache.commons.logging,org.apache.jasper,org.apache.lucene,org.apache.lucene.analysis,org.eclipse.ant.core,org.eclipse.ant.ui,org.eclipse.compare,org.eclipse.core.boot,org.eclipse.core.commands,org.eclipse.core.contenttype,org.eclipse.core.databinding,org.eclipse.core.databinding.beans,org.eclipse.core.expressions,org.eclipse.core.filebuffers,org.eclipse.core.filesystem,org.eclipse.core.filesystem.win32.x86,org.eclipse.core.jobs,org.eclipse.core.net,org.eclipse.core.resources,org.eclipse.core.resources.compatibility,org.eclipse.core.resources.win32,org.eclipse.core.runtime,org.eclipse.core.runtime.compatibility,org.eclipse.core.runtime.compatibility.auth,org.eclipse.core.runtime.compatibility.registry,org.eclipse.core.variables,org.eclipse.cvs,org.eclipse.cvs.source,org.eclipse.debug.core,org.eclipse.debug.ui,org.eclipse.emf,org.eclipse.emf.ant,org.eclipse.emf.cheatsheets,org.eclipse.emf.codegen,org.eclipse.emf.codegen.ecore,org.eclipse.emf.codegen.ecore.ui,org.eclipse.emf.codegen.ui,org.eclipse.emf.common,org.eclipse.emf.common.ui,org.eclipse.emf.commonj.sdo,org.eclipse.emf.converter,org.eclipse.emf.doc,org.eclipse.emf.ecore,org.eclipse.emf.ecore.change,org.eclipse.emf.ecore.change.edit,org.eclipse.emf.ecore.edit,org.eclipse.emf.ecore.editor,org.eclipse.emf.ecore.sdo,org.eclipse.emf.ecore.sdo.doc,org.eclipse.emf.ecore.sdo.edit,org.eclipse.emf.ecore.sdo.editor,org.eclipse.emf.ecore.sdo.source,org.eclipse.emf.ecore.xmi,org.eclipse.emf.edit,org.eclipse.emf.edit.ui,org.eclipse.emf.exporter,org.eclipse.emf.importer,org.eclipse.emf.importer.ecore,org.eclipse.emf.importer.java,org.eclipse.emf.importer.rose,org.eclipse.emf.mapping,org.eclipse.emf.mapping.ecore2ecore,org.eclipse.emf.mapping.ecore2ecore.editor,org.eclipse.emf.mapping.ecore2xml,org.eclipse.emf.mapping.ecore2xml.ui,org.eclipse.emf.mapping.ui,org.eclipse.emf.mapping.xsd2ecore,org.eclipse.emf.mapping.xsd2ecore.editor,org.eclipse.emf.source,org.eclipse.equinox.app,org.eclipse.equinox.common,org.eclipse.equinox.http.jetty,org.eclipse.equinox.http.registry,org.eclipse.equinox.http.servlet,org.eclipse.equinox.jsp.jasper,org.eclipse.equinox.jsp.jasper.registry,org.eclipse.equinox.launcher,org.eclipse.equinox.launcher.win32.win32.x86,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.help,org.eclipse.help.appserver,org.eclipse.help.base,org.eclipse.help.ui,org.eclipse.help.webapp,org.eclipse.jdt,org.eclipse.jdt.compiler.apt,org.eclipse.jdt.compiler.tool,org.eclipse.jdt.core,org.eclipse.jdt.core.manipulation,org.eclipse.jdt.debug,org.eclipse.jdt.debug.ui,org.eclipse.jdt.doc.isv,org.eclipse.jdt.doc.user,org.eclipse.jdt.junit,org.eclipse.jdt.junit.runtime,org.eclipse.jdt.junit4.runtime,org.eclipse.jdt.launching,org.eclipse.jdt.source,org.eclipse.jdt.ui,org.eclipse.jface,org.eclipse.jface.databinding,org.eclipse.jface.text,org.eclipse.jsch.core,org.eclipse.ltk.core.refactoring,org.eclipse.ltk.ui.refactoring,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util,org.eclipse.pde,org.eclipse.pde.build,org.eclipse.pde.core,org.eclipse.pde.doc.user,org.eclipse.pde.junit.runtime,org.eclipse.pde.runtime,org.eclipse.pde.source,org.eclipse.pde.ui,org.eclipse.pde.ui.templates,org.eclipse.platform,org.eclipse.platform.doc.isv,org.eclipse.platform.source,org.eclipse.platform.source.win32.win32.x86,org.eclipse.rcp,org.eclipse.rcp.source,org.eclipse.rcp.source.win32.win32.x86,org.eclipse.sdk,org.eclipse.search,org.eclipse.swt,org.eclipse.swt.win32.win32.x86,org.eclipse.team.core,org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui,org.eclipse.text,org.eclipse.ui,org.eclipse.ui.browser,org.eclipse.ui.cheatsheets,org.eclipse.ui.console,org.eclipse.ui.editors,org.eclipse.ui.externaltools,org.eclipse.ui.forms,org.eclipse.ui.ide,org.eclipse.ui.ide.application,org.eclipse.ui.intro,org.eclipse.ui.intro.universal,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resources,org.eclipse.ui.presentations.r21,org.eclipse.ui.views,org.eclipse.ui.views.properties.tabbed,org.eclipse.ui.win32,org.eclipse.ui.workbench,org.eclipse.ui.workbench.compatibility,org.eclipse.ui.workbench.texteditor,org.eclipse.update.configurator,org.eclipse.update.core,org.eclipse.update.core.win32,org.eclipse.update.scheduler,org.eclipse.update.ui,org.eclipse.xsd,org.eclipse.xsd.cheatsheets,org.eclipse.xsd.doc,org.eclipse.xsd.ecore.exporter,org.eclipse.xsd.ecore.importer,org.eclipse.xsd.edit,org.eclipse.xsd.editor,org.eclipse.xsd.source,org.junit,org.junit4,org.mortbay.jetty"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.net4j.buddies.ui,org.eclipse.net4j.fileshare.ui,org.eclipse.ant.optional.junit,org.eclipse.net4j.buddies.chat,org.eclipse.net4j.util,org.eclipse.net4j.buddies.common,org.eclipse.net4j.buddies,org.eclipse.net4j.fileshare,org.eclipse.net4j.util.ui,org.eclipse.net4j.buddies.chat.ui,org.eclipse.net4j,org.eclipse.net4j.tcp,org.eclipse.net4j.ui"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugtoolbar" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/actioncontributor/debugstatusfields" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/contentOutline" value="false"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/preferences-properties" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/detection" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertySheet" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.session" value="true"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/format" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/evaluation" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/trace" value="true"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structureddocument" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/gotoNextAnnotation" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.types" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.emf.validation/debug/parsers" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/overalltime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/state" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorerDecoration/trace" value="true"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/disabled" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugpopup" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
+<mapEntry key="org.eclipse.net4j/perf" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug" value="true"/>
+<mapEntry key="org.eclipse.jet/debug/projectBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/modelmanager" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/log" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugmenu" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/modelstatelistener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity.sqm.core/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/job" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentmanager" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/traceTagExecution" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/transactions" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertyChangeUpdateActionContributionItem" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/readtime" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.jet/debug/pluginBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.model" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/listeners" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.util" value="true"/>
+<mapEntry key="org.eclipse.wst.dtd.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/additionalBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerjob" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling/showProblems" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentcache" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/transferbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/cache" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.help/debug/protocols" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.jet/debug/savedState" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/registry" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.object" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidators" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/xml" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/bundleLoading" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.emf.query/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jet/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/contributetime" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/locking" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/providers" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/plugin/log" value="true"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/lifecyclelistener" value="false"/>
+<mapEntry key="org.eclipse.emf.query/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/modelmanagement" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/ext/xpathFunctions" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.adapter" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.view" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.datatools.connectivity/connectionprofileextension" value="false"/>
+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time/criteria" value="10"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity/debug" value="true"/>
+<mapEntry key="org.eclipse.jet/debug/modelLoaderExtensions" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/elementstatelistener" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.revision" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/editor/log" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/evaluation" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.model" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/xpath/compilations" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/pluginProjectMonitor" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/locks" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.emf.ocl/debug" value="true"/>
+</mapAttribute>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient3.launch b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient3.launch
new file mode 100644
index 0000000000..a1d4541ca1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/BuddiesClient3.launch
@@ -0,0 +1,470 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.net4j,org.eclipse.net4j.buddies,org.eclipse.net4j.buddies.common,org.eclipse.net4j.buddies.ui,org.eclipse.net4j.tcp,org.eclipse.net4j.ui,org.eclipse.net4j.util,org.eclipse.net4j.util.ui"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/BuddiesClient3"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="${workspace_loc}/../buddies.client3"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosplash&#13;&#10;-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.aspectj.tracing.debug=false&#13;&#10;-Xms40m&#13;&#10;-Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<stringAttribute key="selectedPlugin" value="org.eclipse.net4j.buddies.common"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu,com.jcraft.jsch,javax.servlet,javax.servlet.jsp,org.apache.ant,org.apache.commons.el,org.apache.commons.logging,org.apache.jasper,org.apache.lucene,org.apache.lucene.analysis,org.eclipse.ant.core,org.eclipse.ant.ui,org.eclipse.compare,org.eclipse.core.boot,org.eclipse.core.commands,org.eclipse.core.contenttype,org.eclipse.core.databinding,org.eclipse.core.databinding.beans,org.eclipse.core.expressions,org.eclipse.core.filebuffers,org.eclipse.core.filesystem,org.eclipse.core.filesystem.win32.x86,org.eclipse.core.jobs,org.eclipse.core.net,org.eclipse.core.resources,org.eclipse.core.resources.compatibility,org.eclipse.core.resources.win32,org.eclipse.core.runtime,org.eclipse.core.runtime.compatibility,org.eclipse.core.runtime.compatibility.auth,org.eclipse.core.runtime.compatibility.registry,org.eclipse.core.variables,org.eclipse.cvs,org.eclipse.cvs.source,org.eclipse.debug.core,org.eclipse.debug.ui,org.eclipse.emf,org.eclipse.emf.ant,org.eclipse.emf.cheatsheets,org.eclipse.emf.codegen,org.eclipse.emf.codegen.ecore,org.eclipse.emf.codegen.ecore.ui,org.eclipse.emf.codegen.ui,org.eclipse.emf.common,org.eclipse.emf.common.ui,org.eclipse.emf.commonj.sdo,org.eclipse.emf.converter,org.eclipse.emf.doc,org.eclipse.emf.ecore,org.eclipse.emf.ecore.change,org.eclipse.emf.ecore.change.edit,org.eclipse.emf.ecore.edit,org.eclipse.emf.ecore.editor,org.eclipse.emf.ecore.sdo,org.eclipse.emf.ecore.sdo.doc,org.eclipse.emf.ecore.sdo.edit,org.eclipse.emf.ecore.sdo.editor,org.eclipse.emf.ecore.sdo.source,org.eclipse.emf.ecore.xmi,org.eclipse.emf.edit,org.eclipse.emf.edit.ui,org.eclipse.emf.exporter,org.eclipse.emf.importer,org.eclipse.emf.importer.ecore,org.eclipse.emf.importer.java,org.eclipse.emf.importer.rose,org.eclipse.emf.mapping,org.eclipse.emf.mapping.ecore2ecore,org.eclipse.emf.mapping.ecore2ecore.editor,org.eclipse.emf.mapping.ecore2xml,org.eclipse.emf.mapping.ecore2xml.ui,org.eclipse.emf.mapping.ui,org.eclipse.emf.mapping.xsd2ecore,org.eclipse.emf.mapping.xsd2ecore.editor,org.eclipse.emf.source,org.eclipse.equinox.app,org.eclipse.equinox.common,org.eclipse.equinox.http.jetty,org.eclipse.equinox.http.registry,org.eclipse.equinox.http.servlet,org.eclipse.equinox.jsp.jasper,org.eclipse.equinox.jsp.jasper.registry,org.eclipse.equinox.launcher,org.eclipse.equinox.launcher.win32.win32.x86,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.help,org.eclipse.help.appserver,org.eclipse.help.base,org.eclipse.help.ui,org.eclipse.help.webapp,org.eclipse.jdt,org.eclipse.jdt.compiler.apt,org.eclipse.jdt.compiler.tool,org.eclipse.jdt.core,org.eclipse.jdt.core.manipulation,org.eclipse.jdt.debug,org.eclipse.jdt.debug.ui,org.eclipse.jdt.doc.isv,org.eclipse.jdt.doc.user,org.eclipse.jdt.junit,org.eclipse.jdt.junit.runtime,org.eclipse.jdt.junit4.runtime,org.eclipse.jdt.launching,org.eclipse.jdt.source,org.eclipse.jdt.ui,org.eclipse.jface,org.eclipse.jface.databinding,org.eclipse.jface.text,org.eclipse.jsch.core,org.eclipse.ltk.core.refactoring,org.eclipse.ltk.ui.refactoring,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util,org.eclipse.pde,org.eclipse.pde.build,org.eclipse.pde.core,org.eclipse.pde.doc.user,org.eclipse.pde.junit.runtime,org.eclipse.pde.runtime,org.eclipse.pde.source,org.eclipse.pde.ui,org.eclipse.pde.ui.templates,org.eclipse.platform,org.eclipse.platform.doc.isv,org.eclipse.platform.source,org.eclipse.platform.source.win32.win32.x86,org.eclipse.rcp,org.eclipse.rcp.source,org.eclipse.rcp.source.win32.win32.x86,org.eclipse.sdk,org.eclipse.search,org.eclipse.swt,org.eclipse.swt.win32.win32.x86,org.eclipse.team.core,org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui,org.eclipse.text,org.eclipse.ui,org.eclipse.ui.browser,org.eclipse.ui.cheatsheets,org.eclipse.ui.console,org.eclipse.ui.editors,org.eclipse.ui.externaltools,org.eclipse.ui.forms,org.eclipse.ui.ide,org.eclipse.ui.ide.application,org.eclipse.ui.intro,org.eclipse.ui.intro.universal,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resources,org.eclipse.ui.presentations.r21,org.eclipse.ui.views,org.eclipse.ui.views.properties.tabbed,org.eclipse.ui.win32,org.eclipse.ui.workbench,org.eclipse.ui.workbench.compatibility,org.eclipse.ui.workbench.texteditor,org.eclipse.update.configurator,org.eclipse.update.core,org.eclipse.update.core.win32,org.eclipse.update.scheduler,org.eclipse.update.ui,org.eclipse.xsd,org.eclipse.xsd.cheatsheets,org.eclipse.xsd.doc,org.eclipse.xsd.ecore.exporter,org.eclipse.xsd.ecore.importer,org.eclipse.xsd.edit,org.eclipse.xsd.editor,org.eclipse.xsd.source,org.junit,org.junit4,org.mortbay.jetty"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.net4j.buddies.ui,org.eclipse.net4j.fileshare.ui,org.eclipse.ant.optional.junit,org.eclipse.net4j.buddies.chat,org.eclipse.net4j.util,org.eclipse.net4j.buddies.common,org.eclipse.net4j.buddies,org.eclipse.net4j.fileshare,org.eclipse.net4j.util.ui,org.eclipse.net4j.buddies.chat.ui,org.eclipse.net4j,org.eclipse.net4j.tcp,org.eclipse.net4j.ui"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugtoolbar" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/actioncontributor/debugstatusfields" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/contentOutline" value="false"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/preferences-properties" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/detection" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertySheet" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.session" value="true"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/format" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/evaluation" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/trace" value="true"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structureddocument" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/gotoNextAnnotation" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.types" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.emf.validation/debug/parsers" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/overalltime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/state" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorerDecoration/trace" value="true"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/disabled" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugpopup" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
+<mapEntry key="org.eclipse.net4j/perf" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug" value="true"/>
+<mapEntry key="org.eclipse.jet/debug/projectBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/modelmanager" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/log" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugmenu" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/modelstatelistener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity.sqm.core/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/job" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentmanager" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/traceTagExecution" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/transactions" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertyChangeUpdateActionContributionItem" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/readtime" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.jet/debug/pluginBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.model" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/listeners" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.util" value="true"/>
+<mapEntry key="org.eclipse.wst.dtd.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/additionalBundleLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerjob" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling/showProblems" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentcache" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/transferbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/cache" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.help/debug/protocols" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.jet/debug/savedState" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/registry" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.object" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidators" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/xml" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/bundleLoading" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.emf.query/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jet/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/contributetime" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/locking" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/providers" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/plugin/log" value="true"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/lifecyclelistener" value="false"/>
+<mapEntry key="org.eclipse.emf.query/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/modelmanagement" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/ext/xpathFunctions" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.query/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.adapter" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.view" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug" value="true"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.datatools.connectivity/connectionprofileextension" value="false"/>
+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.emf.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time/criteria" value="10"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity/debug" value="true"/>
+<mapEntry key="org.eclipse.jet/debug/modelLoaderExtensions" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/elementstatelistener" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.revision" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="com.ibm.datatools.core.ui/editor/log" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/evaluation" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug.model" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/xpath/compilations" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.jet/debug/pluginProjectMonitor" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/locks" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.emf.query.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.emf.ocl/debug" value="true"/>
+</mapAttribute>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..7a2b1016b1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.buddies.ui;singleton:=true
+Bundle-Version: 4.0.100.qualifier
+Bundle-Activator: org.eclipse.net4j.buddies.internal.ui.bundle.OM$Activator
+Bundle-Vendor: %providerName
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
+ org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
+ org.eclipse.net4j;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.net4j.util.ui;bundle-version="[3.0.0,4.0.0)";visibility:=reexport,
+ org.eclipse.net4j.buddies;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.net4j.buddies.chat;bundle-version="[4.0.0,5.0.0)";resolution:=optional,
+ org.eclipse.net4j.ui.shared;bundle-version="[4.0.0,5.0.0)"
+Export-Package: org.eclipse.net4j.buddies.internal.ui;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.ui.actions;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.ui.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.internal.ui.dnd;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.ui.messages;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.buddies.internal.ui.preferences;version="4.0.100",
+ org.eclipse.net4j.buddies.internal.ui.views;version="4.0.100",
+ org.eclipse.net4j.buddies.ui;version="4.0.100"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/build.properties
new file mode 100644
index 0000000000..5255e7b72a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/build.properties
@@ -0,0 +1,25 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ plugin.properties,\
+ .options,\
+ copyright.txt,\
+ about.html,\
+ schema/
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.properties
new file mode 100644
index 0000000000..a56ee5159c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Buddies UI
+providerName = Eclipse Modeling Project
+
+page.name = Buddies
+category.name = Net4j Buddies
+view.name = Buddies
+view.name.0 = Collaborations
+extension-point.name = Facility Pane Creators \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.xml b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.xml
new file mode 100644
index 0000000000..454eeb23f5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/plugin.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension-point id="facilityPaneCreators" name="%extension-point.name" schema="schema/facilityPaneCreators.exsd"/>
+
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ class="org.eclipse.net4j.buddies.internal.ui.preferences.BuddiesPreferencePage"
+ id="org.eclipse.net4j.buddies.ui.preferences.BuddiesPreferencePage"
+ name="%page.name">
+ </page>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.views">
+ <category
+ id="org.eclipse.net4j.buddies"
+ name="%category.name"/>
+ <view
+ category="org.eclipse.net4j.buddies"
+ class="org.eclipse.net4j.buddies.internal.ui.views.BuddiesView"
+ icon="platform:/plugin/org.eclipse.net4j.ui.shared/icons/full/view16/buddies_view.gif"
+ id="org.eclipse.net4j.BuddiesView"
+ name="%view.name"/>
+ <view
+ category="org.eclipse.net4j.buddies"
+ class="org.eclipse.net4j.buddies.internal.ui.views.CollaborationsView"
+ icon="platform:/plugin/org.eclipse.net4j.ui.shared/icons/full/view16/collaborations_view.gif"
+ id="org.eclipse.net4j.CollaborationsView"
+ name="%view.name.0"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.perspectiveExtensions">
+ <perspectiveExtension
+ targetID="org.eclipse.ui.resourcePerspective">
+ <view
+ id="org.eclipse.net4j.BuddiesView"
+ ratio="1"
+ relationship="stack"
+ relative="org.eclipse.ui.views.ContentOutline">
+ </view>
+ </perspectiveExtension>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/schema/facilityPaneCreators.exsd b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/schema/facilityPaneCreators.exsd
new file mode 100644
index 0000000000..0d7295632f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/schema/facilityPaneCreators.exsd
@@ -0,0 +1,128 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.net4j.buddies.ui">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.net4j.buddies.ui" id="facilityPaneCreators" name="Facility Pane Creators"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="facilityPaneCreator" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="facilityPaneCreator">
+ <annotation>
+ <appInfo>
+ <meta.element labelAttribute="type" icon="icon"/>
+ </appInfo>
+ </annotation>
+ <complexType>
+ <attribute name="type" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.net4j.buddies.ui.IFacilityPaneCreator"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="icon" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="resource"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="copyright"/>
+ </appinfo>
+ <documentation>
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/AbstractItemProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/AbstractItemProvider.java
new file mode 100644
index 0000000000..381ec467a3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/AbstractItemProvider.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.ui.shared.SharedIcons;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.ui.UIUtil;
+import org.eclipse.net4j.util.ui.actions.LongRunningAction;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
+import org.eclipse.net4j.util.ui.views.ContainerView;
+import org.eclipse.net4j.util.ui.views.IElementFilter;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class AbstractItemProvider extends ContainerItemProvider<IContainer<Object>>
+{
+ public static final Color GRAY = UIUtil.getDisplay().getSystemColor(SWT.COLOR_GRAY);
+
+ private Font bold;
+
+ public AbstractItemProvider()
+ {
+ }
+
+ public AbstractItemProvider(IElementFilter rootElementFilter)
+ {
+ super(rootElementFilter);
+ }
+
+ @Override
+ public void dispose()
+ {
+ UIUtil.dispose(bold);
+ super.dispose();
+ }
+
+ public Font getBold()
+ {
+ return bold;
+ }
+
+ @Override
+ protected Node createNode(Node parent, Object element)
+ {
+ if (element instanceof IMembership)
+ {
+ IMembership membership = (IMembership)element;
+ return createMembershipNode(parent, membership);
+ }
+
+ return super.createNode(parent, element);
+ }
+
+ protected abstract Node createMembershipNode(Node parent, IMembership membership);
+
+ @Override
+ public String getText(Object obj)
+ {
+ if (obj instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)obj;
+ return buddy.getUserID();
+ }
+
+ if (obj instanceof ICollaboration)
+ {
+ ICollaboration collaboration = (ICollaboration)obj;
+ return collaboration.getTitle();
+ }
+
+ if (obj instanceof IMembership)
+ {
+ IMembership membership = (IMembership)obj;
+ return getText(membership);
+ }
+
+ return super.getText(obj);
+ }
+
+ protected abstract String getText(IMembership membership);
+
+ @Override
+ public Image getImage(Object obj)
+ {
+ if (obj instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)obj;
+ switch (buddy.getState())
+ {
+ case AVAILABLE:
+ return SharedIcons.getImage(SharedIcons.OBJ_BUDDY);
+
+ case LONESOME:
+ return SharedIcons.getImage(SharedIcons.OBJ_BUDDY_LONESOME);
+
+ case AWAY:
+ return SharedIcons.getImage(SharedIcons.OBJ_BUDDY_AWAY);
+
+ case DO_NOT_DISTURB:
+ return SharedIcons.getImage(SharedIcons.OBJ_BUDDY_DO_NOT_DISTURB);
+ }
+ }
+
+ if (obj instanceof ICollaboration)
+ {
+ return SharedIcons.getImage(SharedIcons.OBJ_COLLABORATION);
+ }
+
+ if (obj instanceof IMembership)
+ {
+ IMembership membership = (IMembership)obj;
+ return getImage(membership);
+ }
+
+ return super.getImage(obj);
+ }
+
+ protected abstract Image getImage(IMembership membership);
+
+ @Override
+ public Color getForeground(Object obj)
+ {
+ if (obj instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)obj;
+ switch (buddy.getState())
+ {
+ case AWAY:
+ case DO_NOT_DISTURB:
+ return GRAY;
+ }
+ }
+
+ return super.getForeground(obj);
+ }
+
+ @Override
+ public Font getFont(Object obj)
+ {
+ if (obj instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)obj;
+ switch (buddy.getState())
+ {
+ case LONESOME:
+ return bold;
+ }
+ }
+
+ return super.getFont(obj);
+ }
+
+ @Override
+ protected void fillContextMenu(IMenuManager manager, ITreeSelection selection)
+ {
+ manager.add(new Separator());
+ if (selection.size() == 1)
+ {
+ Object obj = selection.getFirstElement();
+ if (obj instanceof IBuddy)
+ {
+ manager.add(new RemoveAction(obj));
+ }
+ else if (obj instanceof IBuddyCollaboration)
+ {
+ final IBuddyCollaboration collaboration = (IBuddyCollaboration)obj;
+ manager.add(new SafeAction(
+ Messages.getString("AbstractItemProvider.0"), Messages.getString("AbstractItemProvider.1")) //$NON-NLS-1$ //$NON-NLS-2$
+ {
+ @Override
+ protected void safeRun() throws Exception
+ {
+ collaboration.leave();
+ }
+ });
+ }
+ }
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+ {
+ UIUtil.dispose(bold);
+ super.inputChanged(viewer, oldInput, newInput);
+ bold = UIUtil.getBoldFont(getViewer().getControl());
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public class RemoveAction extends LongRunningAction
+ {
+ private Object object;
+
+ public RemoveAction(Object object)
+ {
+ super(
+ Messages.getString("AbstractItemProvider.2"), Messages.getString("AbstractItemProvider.3"), ContainerView.getDeleteImageDescriptor()); //$NON-NLS-1$ //$NON-NLS-2$
+ this.object = object;
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ protected void doRun(IProgressMonitor progressMonitor) throws Exception
+ {
+ LifecycleUtil.deactivateNoisy(object);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesContentProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesContentProvider.java
new file mode 100644
index 0000000000..bbb50a79c6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesContentProvider.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.common.IBuddyContainer;
+import org.eclipse.net4j.util.ui.StructuredContentProvider;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesContentProvider extends StructuredContentProvider<IBuddyContainer>
+{
+ public BuddiesContentProvider()
+ {
+ }
+
+ public Object[] getElements(Object inputElement)
+ {
+ return getInput().getElements();
+ }
+
+ @Override
+ protected void connectInput(IBuddyContainer input)
+ {
+ input.addListener(this);
+ }
+
+ @Override
+ protected void disconnectInput(IBuddyContainer input)
+ {
+ input.removeListener(this);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesItemProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesItemProvider.java
new file mode 100644
index 0000000000..9a9d66545b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/BuddiesItemProvider.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.util.ui.views.IElementFilter;
+
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesItemProvider extends AbstractItemProvider
+{
+ public BuddiesItemProvider()
+ {
+ }
+
+ public BuddiesItemProvider(IElementFilter rootElementFilter)
+ {
+ super(rootElementFilter);
+ }
+
+ @Override
+ protected Node createMembershipNode(Node parent, IMembership membership)
+ {
+ return createLeafNode(parent, membership);
+ }
+
+ @Override
+ protected String getText(IMembership membership)
+ {
+ return getText(membership.getCollaboration());
+ }
+
+ @Override
+ protected Image getImage(IMembership membership)
+ {
+ return getImage(membership.getCollaboration());
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/ChatInstaller.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/ChatInstaller.java
new file mode 100644
index 0000000000..a6b7184bff
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/ChatInstaller.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.chat.IChat;
+
+/**
+ * @author Eike Stepper
+ */
+public final class ChatInstaller
+{
+ private ChatInstaller()
+ {
+ }
+
+ public static void installChat(IBuddyCollaboration collaboration)
+ {
+ collaboration.installFacility(IChat.TYPE);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsContentProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsContentProvider.java
new file mode 100644
index 0000000000..5d508835ae
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsContentProvider.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.common.ICollaborationContainer;
+import org.eclipse.net4j.util.ui.StructuredContentProvider;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationsContentProvider extends StructuredContentProvider<ICollaborationContainer>
+{
+ public CollaborationsContentProvider()
+ {
+ }
+
+ public Object[] getElements(Object inputElement)
+ {
+ return getInput().getElements();
+ }
+
+ @Override
+ protected void connectInput(ICollaborationContainer input)
+ {
+ input.addListener(this);
+ }
+
+ @Override
+ protected void disconnectInput(ICollaborationContainer input)
+ {
+ input.removeListener(this);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsItemProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsItemProvider.java
new file mode 100644
index 0000000000..c453e89f0f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/CollaborationsItemProvider.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.internal.buddies.Self;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.ui.views.IElementFilter;
+
+import org.eclipse.swt.graphics.Image;
+
+import java.util.Collection;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationsItemProvider extends AbstractItemProvider
+{
+ public CollaborationsItemProvider()
+ {
+ }
+
+ public CollaborationsItemProvider(IElementFilter rootElementFilter)
+ {
+ super(rootElementFilter);
+ }
+
+ @Override
+ protected Node createNode(Node parent, Object element)
+ {
+ if (element instanceof Self)
+ {
+ return new SelfNode((Self)element);
+ }
+
+ if (element instanceof IMembership)
+ {
+ IMembership membership = (IMembership)element;
+ if (membership.getBuddy() instanceof Self)
+ {
+ return null;
+ }
+ }
+
+ return super.createNode(parent, element);
+ }
+
+ @Override
+ protected Node createMembershipNode(Node parent, IMembership membership)
+ {
+ return createLeafNode(parent, membership);
+ }
+
+ @Override
+ protected String getText(IMembership membership)
+ {
+ return getText(membership.getBuddy());
+ }
+
+ @Override
+ protected Image getImage(IMembership membership)
+ {
+ return getImage(membership.getBuddy());
+ }
+
+ /**
+ * @since 4.0
+ */
+ @Override
+ public void refreshElement(Object element, boolean updateLabels)
+ {
+ super.refreshElement(null, updateLabels);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private class SelfNode extends AbstractContainerNode implements IListener
+ {
+ private Self self;
+
+ public SelfNode(Self self)
+ {
+ super(null);
+ this.self = self;
+ }
+
+ @Override
+ public void dispose()
+ {
+ if (!isDisposed())
+ {
+ self.removeListener(containerListener);
+ super.dispose();
+ }
+ }
+
+ public Self getElement()
+ {
+ return self;
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ IMembership membership = (IMembership)event.getSource();
+ if (event instanceof ILifecycleEvent)
+ {
+ ILifecycleEvent e = (ILifecycleEvent)event;
+ if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ membership.removeListener(this);
+ ICollaboration collaboration = membership.getCollaboration();
+ Node node = getNode(collaboration);
+ if (node != null)
+ {
+ node.dispose();
+ }
+ }
+ }
+ }
+
+ @Override
+ protected Node addChild(Collection<Node> children, Object element)
+ {
+ IMembership membership = (IMembership)element;
+ membership.addListener(this);
+ return super.addChild(children, membership.getCollaboration());
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/MembershipItemProvider.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/MembershipItemProvider.java
new file mode 100644
index 0000000000..f472653fff
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/MembershipItemProvider.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui;
+
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.util.ui.views.IElementFilter;
+
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Eike Stepper
+ */
+public class MembershipItemProvider extends AbstractItemProvider
+{
+ public MembershipItemProvider()
+ {
+ }
+
+ public MembershipItemProvider(IElementFilter rootElementFilter)
+ {
+ super(rootElementFilter);
+ }
+
+ @Override
+ protected Node createMembershipNode(Node parent, IMembership membership)
+ {
+ return createContaineNode(parent, membership);
+ }
+
+ @Override
+ protected String getText(IMembership membership)
+ {
+ return getText(membership.getBuddy()) + "(" + getText(membership.getCollaboration()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Override
+ protected Image getImage(IMembership membership)
+ {
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ConnectAction.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ConnectAction.java
new file mode 100644
index 0000000000..fdd917d9f6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ConnectAction.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.actions;
+
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+/**
+ * @author Eike Stepper
+ */
+public final class ConnectAction extends SafeAction
+{
+ public ConnectAction()
+ {
+ super(Messages.getString("ConnectAction_0"), Messages.getString("ConnectAction_1")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ ISessionManager.INSTANCE.connect();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/DisconnectAction.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/DisconnectAction.java
new file mode 100644
index 0000000000..e23b486a7d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/DisconnectAction.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.actions;
+
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+/**
+ * @author Eike Stepper
+ */
+public final class DisconnectAction extends SafeAction
+{
+ public DisconnectAction()
+ {
+ super(Messages.getString("DisconnectAction_0"), Messages.getString("DisconnectAction_1")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ ISessionManager.INSTANCE.disconnect();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/FlashAction.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/FlashAction.java
new file mode 100644
index 0000000000..41bed59617
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/FlashAction.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.actions;
+
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+/**
+ * @author Eike Stepper
+ */
+public final class FlashAction extends SafeAction
+{
+ public FlashAction()
+ {
+ super(Messages.getString("FlashAction_0"), Messages.getString("FlashAction_1")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ ISessionManager.INSTANCE.flashMe();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ReconnectAction.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ReconnectAction.java
new file mode 100644
index 0000000000..25aafd30fd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/ReconnectAction.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.actions;
+
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+/**
+ * @author Eike Stepper
+ */
+public final class ReconnectAction extends SafeAction
+{
+ public ReconnectAction()
+ {
+ super(Messages.getString("ReconnectAction_0"), Messages.getString("ReconnectAction_1")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ ISessionManager.INSTANCE.disconnect();
+ ISessionManager.INSTANCE.connect();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java
new file mode 100644
index 0000000000..d0d98384ac
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.actions;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.common.IBuddy.State;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.internal.buddies.Self;
+import org.eclipse.net4j.ui.shared.SharedIcons;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class StateAction extends SafeAction
+{
+ private State state;
+
+ public StateAction(String text, State state, String key)
+ {
+ super(text, Action.AS_RADIO_BUTTON);
+ setToolTipText(MessageFormat.format(Messages.getString("StateAction_0"), text.toLowerCase())); //$NON-NLS-1$
+ setImageDescriptor(SharedIcons.getDescriptor(key));
+ this.state = state;
+ }
+
+ public void updateState()
+ {
+ IBuddySession session = ISessionManager.INSTANCE.getSession();
+ setEnabled(session != null);
+ setChecked(session != null && session.getSelf().getState() == state);
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ IBuddySession session = ISessionManager.INSTANCE.getSession();
+ if (session != null && isChecked())
+ {
+ Self self = (Self)session.getSelf();
+ self.setState(state);
+ }
+ }
+
+ public static class DropDownAction extends Action implements IMenuCreator
+ {
+ private Menu fMenu;
+
+ private StateAction availableAction = new AvailableAction();
+
+ private StateAction lonesomeAction = new LonesomeAction();
+
+ private StateAction awayAction = new AwayAction();
+
+ private StateAction doNotDisturbAction = new DoNotDisturbAction();
+
+ public DropDownAction()
+ {
+ setText(Messages.getString("StateAction_2")); //$NON-NLS-1$
+ setMenuCreator(this);
+ }
+
+ public void dispose()
+ {
+ if (fMenu != null)
+ {
+ fMenu.dispose();
+ fMenu = null;
+ }
+ }
+
+ public void updateState()
+ {
+ availableAction.updateState();
+ lonesomeAction.updateState();
+ awayAction.updateState();
+ doNotDisturbAction.updateState();
+
+ IBuddySession session = ISessionManager.INSTANCE.getSession();
+ if (session != null)
+ {
+ setEnabled(true);
+ State state = session.getSelf().getState();
+ switch (state)
+ {
+ case AVAILABLE:
+ setImageDescriptor(availableAction.getImageDescriptor());
+ break;
+
+ case LONESOME:
+ setImageDescriptor(lonesomeAction.getImageDescriptor());
+ break;
+
+ case AWAY:
+ setImageDescriptor(awayAction.getImageDescriptor());
+ break;
+
+ case DO_NOT_DISTURB:
+ setImageDescriptor(doNotDisturbAction.getImageDescriptor());
+ break;
+ }
+ }
+ else
+ {
+ setImageDescriptor(awayAction.getImageDescriptor());
+ setEnabled(false);
+ }
+ }
+
+ public Menu getMenu(Control parent)
+ {
+ if (fMenu != null)
+ {
+ fMenu.dispose();
+ }
+
+ fMenu = new Menu(parent);
+ addActionToMenu(fMenu, availableAction);
+ addActionToMenu(fMenu, lonesomeAction);
+ addActionToMenu(fMenu, awayAction);
+ addActionToMenu(fMenu, doNotDisturbAction);
+ return fMenu;
+ }
+
+ public Menu getMenu(Menu parent)
+ {
+ return null;
+ }
+
+ @Override
+ public void run()
+ {
+ }
+
+ protected void addActionToMenu(Menu parent, Action action)
+ {
+ ActionContributionItem item = new ActionContributionItem(action);
+ item.fill(parent, -1);
+ }
+ }
+
+ public static final class AvailableAction extends StateAction
+ {
+ public AvailableAction()
+ {
+ super(Messages.getString("StateAction_3"), State.AVAILABLE, SharedIcons.OBJ_BUDDY); //$NON-NLS-1$
+ }
+ }
+
+ public static final class LonesomeAction extends StateAction
+ {
+ public LonesomeAction()
+ {
+ super(Messages.getString("StateAction_4"), State.LONESOME, SharedIcons.OBJ_BUDDY_LONESOME); //$NON-NLS-1$
+ }
+ }
+
+ public static final class AwayAction extends StateAction
+ {
+ public AwayAction()
+ {
+ super(Messages.getString("StateAction_5"), State.AWAY, SharedIcons.OBJ_BUDDY_AWAY); //$NON-NLS-1$
+ }
+ }
+
+ public static final class DoNotDisturbAction extends StateAction
+ {
+ public DoNotDisturbAction()
+ {
+ super(Messages.getString("StateAction_6"), State.DO_NOT_DISTURB, SharedIcons.OBJ_BUDDY_DO_NOT_DISTURB); //$NON-NLS-1$
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/bundle/OM.java
new file mode 100644
index 0000000000..14cabc5e87
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/bundle/OM.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.bundle;
+
+import org.eclipse.net4j.internal.buddies.SessionManager;
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+import org.eclipse.net4j.util.ui.UIActivator;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.buddies.ui"; //$NON-NLS-1$
+
+ public static final String EXT_POINT = "facilityPaneCreators"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends UIActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+
+ @Override
+ protected void doStart() throws Exception
+ {
+ SessionManager.INSTANCE.activate();
+ }
+
+ @Override
+ protected void doStop() throws Exception
+ {
+ SessionManager.INSTANCE.deactivate();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/dnd/BuddiesTransfer.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/dnd/BuddiesTransfer.java
new file mode 100644
index 0000000000..e7d4a84e0a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/dnd/BuddiesTransfer.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.dnd;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.ui.bundle.OM;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.internal.buddies.SessionManager;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+import org.eclipse.net4j.util.ui.dnd.DNDTransfer;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesTransfer extends DNDTransfer<IBuddy[]>
+{
+ public static final String TYPE_NAME = "buddies-transfer-format"; //$NON-NLS-1$
+
+ public static final BuddiesTransfer INSTANCE = new BuddiesTransfer();
+
+ public BuddiesTransfer()
+ {
+ super(TYPE_NAME);
+ }
+
+ @Override
+ protected void writeObject(ExtendedDataOutputStream out, IBuddy[] buddies) throws IOException
+ {
+ out.writeInt(buddies.length);
+ for (IBuddy buddy : buddies)
+ {
+ out.writeString(buddy.getUserID());
+ }
+ }
+
+ @Override
+ protected IBuddy[] readObject(ExtendedDataInputStream in) throws IOException
+ {
+ IBuddySession session = SessionManager.INSTANCE.getSession();
+ if (session == null)
+ {
+ OM.LOG.warn(Messages.getString("BuddiesTransfer_1")); //$NON-NLS-1$
+ return null;
+ }
+
+ List<IBuddy> buddies = new ArrayList<IBuddy>();
+ int size = in.readInt();
+ for (int i = 0; i < size; i++)
+ {
+ String userID = in.readString();
+ IBuddy buddy = session.getBuddy(userID);
+ if (buddy != null)
+ {
+ buddies.add(buddy);
+ }
+ else
+ {
+ OM.LOG.warn(MessageFormat.format(Messages.getString("BuddiesTransfer_2"), userID)); //$NON-NLS-1$
+ }
+ }
+
+ return buddies.toArray(new IBuddy[buddies.size()]);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/Messages.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/Messages.java
new file mode 100644
index 0000000000..6d44ae2178
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/Messages.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Victor Roldan Betancort - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.net4j.buddies.internal.ui.messages;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.net4j.buddies.internal.ui.messages.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/messages.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/messages.properties
new file mode 100644
index 0000000000..187586764f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/messages/messages.properties
@@ -0,0 +1,37 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Victor Roldan Betancort - initial API and implementation
+# Eike Stepper - maintenance
+
+AbstractItemProvider.0=Leave
+AbstractItemProvider.1=Leave this collaboration
+AbstractItemProvider.2=Remove
+AbstractItemProvider.3=Remove
+BuddiesPreferencePage_0=Server:
+BuddiesPreferencePage_1=User ID:
+BuddiesPreferencePage_2=Password:
+BuddiesPreferencePage_3=Auto Connect
+BuddiesTransfer_1=Buddy session is not available
+BuddiesTransfer_2=Buddy is not available: {0}
+CollaborationsPane_0=Activate {0} facility
+CollaborationsView_2=Start {0}
+CollaborationsView_3=Start a {0} facility
+ConnectAction_0=Connect
+ConnectAction_1=Connect to buddies server
+DisconnectAction_0=Disonnect
+DisconnectAction_1=Disconnect from buddies server
+FlashAction_0=Flash Me
+FlashAction_1=Flash Me
+ReconnectAction_0=Reconnect
+ReconnectAction_1=Reconnect to buddies server
+StateAction_0=Set own state to \"{0}\"
+StateAction_2=Set My State
+StateAction_3=Available
+StateAction_4=Lonesome
+StateAction_5=Away
+StateAction_6=Do Not Disturb
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/preferences/BuddiesPreferencePage.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/preferences/BuddiesPreferencePage.java
new file mode 100644
index 0000000000..7ebe04e821
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/preferences/BuddiesPreferencePage.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.preferences;
+
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.internal.buddies.bundle.OM;
+import org.eclipse.net4j.util.ui.UIUtil;
+import org.eclipse.net4j.util.ui.prefs.OMPreferencePage;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesPreferencePage extends OMPreferencePage
+{
+ private Text connectorDescription;
+
+ private Text userID;
+
+ private Text password;
+
+ private Button autoConnect;
+
+ public BuddiesPreferencePage()
+ {
+ super(OM.PREFS);
+ }
+
+ @Override
+ protected Control createUI(Composite parent)
+ {
+ Composite composite = UIUtil.createGridComposite(parent, 2);
+ composite.setLayoutData(UIUtil.createGridData());
+
+ new Label(composite, SWT.NONE).setText(Messages.getString("BuddiesPreferencePage_0")); //$NON-NLS-1$
+ connectorDescription = new Text(composite, SWT.BORDER);
+ connectorDescription.setLayoutData(UIUtil.createGridData(true, false));
+
+ new Label(composite, SWT.NONE).setText(Messages.getString("BuddiesPreferencePage_1")); //$NON-NLS-1$
+ userID = new Text(composite, SWT.BORDER);
+ userID.setLayoutData(new GridData(100, SWT.DEFAULT));
+
+ new Label(composite, SWT.NONE).setText(Messages.getString("BuddiesPreferencePage_2")); //$NON-NLS-1$
+ password = new Text(composite, SWT.BORDER | SWT.PASSWORD);
+ password.setLayoutData(new GridData(100, SWT.DEFAULT));
+
+ new Label(composite, SWT.NONE);
+ autoConnect = new Button(composite, SWT.CHECK);
+ autoConnect.setText(Messages.getString("BuddiesPreferencePage_3")); //$NON-NLS-1$
+
+ initValues();
+ return composite;
+ }
+
+ protected void initValues()
+ {
+ connectorDescription.setText(OM.PREF_CONNECTOR_DESCRIPTION.getValue());
+ userID.setText(OM.PREF_USER_ID.getValue());
+ password.setText(OM.PREF_PASSWORD.getValue());
+ autoConnect.setSelection(OM.PREF_AUTO_CONNECT.getValue());
+ }
+
+ @Override
+ public boolean performOk()
+ {
+ OM.PREF_CONNECTOR_DESCRIPTION.setValue(connectorDescription.getText());
+ OM.PREF_USER_ID.setValue(userID.getText());
+ OM.PREF_PASSWORD.setValue(password.getText());
+ OM.PREF_AUTO_CONNECT.setValue(autoConnect.getSelection());
+ return super.performOk();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDragListener.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDragListener.java
new file mode 100644
index 0000000000..ff47beca18
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDragListener.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.ui.dnd.BuddiesTransfer;
+import org.eclipse.net4j.util.ui.dnd.DNDDragListener;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesDragListener extends DNDDragListener<IBuddy[]>
+{
+ private static final Transfer[] TRANSFERS = new Transfer[] { BuddiesTransfer.INSTANCE };
+
+ protected BuddiesDragListener(StructuredViewer viewer)
+ {
+ super(TRANSFERS, viewer);
+ }
+
+ @Override
+ protected IBuddy[] getObject(IStructuredSelection selection)
+ {
+ Collection<IBuddy> buddies = new ArrayList<IBuddy>();
+ for (Iterator<?> it = selection.iterator(); it.hasNext();)
+ {
+ Object element = it.next();
+ if (element instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)element;
+ buddies.add(buddy);
+ }
+ }
+
+ if (buddies.isEmpty())
+ {
+ return null;
+ }
+
+ return buddies.toArray(new IBuddy[buddies.size()]);
+ }
+
+ public static void support(StructuredViewer viewer)
+ {
+ viewer.addDragSupport(DND.DROP_MOVE, TRANSFERS, new BuddiesDragListener(viewer));
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDropAdapter.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDropAdapter.java
new file mode 100644
index 0000000000..d39615456b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesDropAdapter.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.ui.dnd.BuddiesTransfer;
+import org.eclipse.net4j.util.ui.dnd.DNDDropAdapter;
+
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesDropAdapter extends DNDDropAdapter<IBuddy[]>
+{
+ /**
+ * @since 3.0
+ */
+ public static final Transfer[] TRANSFERS = new Transfer[] { BuddiesTransfer.INSTANCE };
+
+ protected BuddiesDropAdapter(StructuredViewer viewer)
+ {
+ super(TRANSFERS, viewer);
+ setExpandEnabled(false);
+ }
+
+ @Override
+ protected boolean validateTarget(Object target, int operation)
+ {
+ return target instanceof IBuddyCollaboration;
+ }
+
+ @Override
+ protected boolean performDrop(IBuddy[] buddies, Object target)
+ {
+ IBuddyCollaboration collaboration = (IBuddyCollaboration)target;
+ collaboration.invite(buddies);
+ return true;
+ }
+
+ public static void support(StructuredViewer viewer)
+ {
+ viewer.addDropSupport(DND.DROP_MOVE, TRANSFERS, new BuddiesDropAdapter(viewer));
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java
new file mode 100644
index 0000000000..53b9f04471
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.ui.ChatInstaller;
+import org.eclipse.net4j.util.container.ContainerUtil;
+import org.eclipse.net4j.util.container.IContainer;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class BuddiesView extends SessionManagerView
+{
+ public BuddiesView()
+ {
+ }
+
+ @Override
+ protected IContainer<?> getContainer()
+ {
+ return getSession() != null ? getSession() : ContainerUtil.emptyContainer();
+ }
+
+ @Override
+ protected Control createControl(Composite parent)
+ {
+ Control control = super.createControl(parent);
+ BuddiesDragListener.support(getViewer());
+ BuddiesDropAdapter.support(getViewer());
+ return control;
+ }
+
+ @Override
+ protected void doubleClicked(Object object)
+ {
+ if (getSession() != null && object instanceof IBuddy)
+ {
+ IBuddy buddy = (IBuddy)object;
+ IBuddy self = getSession().getSelf();
+ IMembership membership = self.initiate(buddy);
+
+ try
+ {
+ // The chat dependency is optional
+ ChatInstaller.installChat((IBuddyCollaboration)membership.getCollaboration());
+ }
+ catch (Throwable ignore)
+ {
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsPane.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsPane.java
new file mode 100644
index 0000000000..ce8761be95
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsPane.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.common.IFacilityInstalledEvent;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.buddies.ui.IFacilityPaneCreator;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.container.IContainerEvent;
+import org.eclipse.net4j.util.container.IContainerEventVisitor;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IActionBars;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationsPane extends Composite implements IListener
+{
+ private CollaborationsView collaborationsView;
+
+ private IBuddySession session;
+
+ private IBuddyCollaboration activeCollaboration;
+
+ private Map<IBuddyCollaboration, IFacility> activeFacilities = new HashMap<IBuddyCollaboration, IFacility>();
+
+ private Map<IFacility, FacilityPane> facilityPanes = new HashMap<IFacility, FacilityPane>();
+
+ private List<ActivateFacilityAction> activateFacilityActions = new ArrayList<ActivateFacilityAction>();
+
+ private StackLayout paneStack;
+
+ public CollaborationsPane(Composite parent, CollaborationsView collaborationsView)
+ {
+ super(parent, SWT.NONE);
+ setLayout(paneStack = new StackLayout());
+ this.collaborationsView = collaborationsView;
+ }
+
+ public CollaborationsView getCollaborationsView()
+ {
+ return collaborationsView;
+ }
+
+ public IBuddySession getSession()
+ {
+ return session;
+ }
+
+ public void setSession(IBuddySession session)
+ {
+ this.session = session;
+ if (session != null)
+ {
+ for (ICollaboration collaboration : session.getSelf().getCollaborations())
+ {
+ collaborationAdded((IBuddyCollaboration)collaboration);
+ }
+ }
+
+ updateState();
+ }
+
+ public IBuddyCollaboration getActiveCollaboration()
+ {
+ return activeCollaboration;
+ }
+
+ public void setActiveCollaboration(IBuddyCollaboration collaboration)
+ {
+ if (activeCollaboration != collaboration)
+ {
+ activeCollaboration = collaboration;
+ IFacility facility = activeFacilities.get(collaboration);
+ setActiveFacility(collaboration, facility);
+ updateState();
+ collaborationsView.refreshViewer(true);
+ }
+ }
+
+ public void setActiveFacility(IBuddyCollaboration collaboration, IFacility facility)
+ {
+ activeFacilities.put(collaboration, facility);
+ if (collaboration == activeCollaboration)
+ {
+ FacilityPane facilityPane = facilityPanes.get(facility);
+ setActiveFacilityPane(facilityPane);
+ updateState();
+ }
+ }
+
+ protected void setActiveFacilityPane(FacilityPane newPane)
+ {
+ if (paneStack.topControl != newPane)
+ {
+ FacilityPane oldPane = (FacilityPane)paneStack.topControl;
+ if (oldPane != null)
+ {
+ oldPane.hidden(newPane);
+ }
+
+ paneStack.topControl = newPane;
+ layout();
+ if (newPane != null)
+ {
+ newPane.showed(oldPane);
+ }
+
+ updateState();
+ }
+ }
+
+ public void fillActionBars(IActionBars bars)
+ {
+ IToolBarManager manager = bars.getToolBarManager();
+ for (IFacilityPaneCreator c : collaborationsView.getFacilityPaneCreators().values())
+ {
+ ActivateFacilityAction action = new ActivateFacilityAction(c.getType(), c.getImageDescriptor());
+ activateFacilityActions.add(action);
+ manager.add(action);
+ }
+ }
+
+ public void updateState()
+ {
+ for (ActivateFacilityAction action : activateFacilityActions)
+ {
+ if (activeCollaboration == null)
+ {
+ action.setEnabled(false);
+ }
+ else
+ {
+ String type = action.getType();
+ action.setEnabled(activeCollaboration.getFacility(type) != null);
+
+ IFacility activeFacility = activeFacilities.get(activeCollaboration);
+ action.setChecked(activeFacility != null && ObjectUtil.equals(activeFacility.getType(), type));
+ }
+ }
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (session == null)
+ {
+ return;
+ }
+
+ if (event.getSource() == session.getSelf() && event instanceof IContainerEvent<?>)
+ {
+ @SuppressWarnings("unchecked")
+ IContainerEvent<IMembership> e = (IContainerEvent<IMembership>)event;
+ e.accept(new IContainerEventVisitor<IMembership>()
+ {
+ public void added(IMembership membership)
+ {
+ collaborationAdded((IBuddyCollaboration)membership.getCollaboration());
+ }
+
+ public void removed(IMembership membership)
+ {
+ collaborationRemoved((IBuddyCollaboration)membership.getCollaboration());
+ }
+ });
+ }
+ else if (event instanceof IFacilityInstalledEvent)
+ {
+ IFacilityInstalledEvent e = (IFacilityInstalledEvent)event;
+ facilityInstalled(e.getFacility(), e.fromRemote());
+ }
+ }
+
+ protected void collaborationAdded(IBuddyCollaboration collaboration)
+ {
+ IFacility[] facilities = collaboration.getFacilities();
+ for (IFacility facility : facilities)
+ {
+ addFacilityPane(facility);
+ }
+
+ if (activeCollaboration == null)
+ {
+ setActiveCollaboration(collaboration);
+ }
+
+ if (facilities.length != 0)
+ {
+ setActiveFacility(collaboration, facilities[0]);
+ }
+
+ collaboration.addListener(this);
+ }
+
+ protected void collaborationRemoved(IBuddyCollaboration collaboration)
+ {
+ collaboration.removeListener(this);
+ if (activeCollaboration == collaboration)
+ {
+ setActiveCollaboration(activeFacilities.isEmpty() ? null : activeFacilities.keySet().iterator().next());
+ }
+
+ activeFacilities.remove(collaboration);
+ for (IFacility facility : collaboration.getFacilities())
+ {
+ FacilityPane pane = facilityPanes.remove(facility);
+ if (pane != null)
+ {
+ pane.dispose();
+ }
+ }
+ }
+
+ protected void facilityInstalled(final IFacility facility, boolean fromRemote)
+ {
+ final IBuddyCollaboration collaboration = (IBuddyCollaboration)facility.getCollaboration();
+ if (fromRemote)
+ {
+ Runnable runnable = new Runnable()
+ {
+ public void run()
+ {
+ try
+ {
+ addFacilityPane(facility);
+ IFacility activeFacility = activeFacilities.get(collaboration);
+ if (activeFacility == null)
+ {
+ setActiveFacility(collaboration, facility);
+ }
+ else
+ {
+ updateState();
+ }
+ }
+ catch (RuntimeException ignore)
+ {
+ }
+ }
+ };
+
+ try
+ {
+ Display display = getDisplay();
+ if (display.getThread() == Thread.currentThread())
+ {
+ runnable.run();
+ }
+ else
+ {
+ display.asyncExec(runnable);
+ }
+ }
+ catch (RuntimeException ignore)
+ {
+ }
+ }
+ else
+ {
+ addFacilityPane(facility);
+ setActiveCollaboration(collaboration);
+ setActiveFacility(collaboration, facility);
+ }
+ }
+
+ protected FacilityPane addFacilityPane(IFacility facility)
+ {
+ IFacilityPaneCreator creator = collaborationsView.getFacilityPaneCreators().get(facility.getType());
+ FacilityPane pane = creator.createPane(this, SWT.NONE);
+ pane.setFacility(facility);
+ facilityPanes.put(facility, pane);
+ return pane;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class ActivateFacilityAction extends SafeAction
+ {
+ private final String type;
+
+ private ActivateFacilityAction(String type, ImageDescriptor descriptor)
+ {
+ super(StringUtil.cap(type), AS_RADIO_BUTTON);
+ setToolTipText(MessageFormat.format(Messages.getString("CollaborationsPane_0"), type)); //$NON-NLS-1$
+ setImageDescriptor(descriptor);
+ this.type = type;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ if (activeCollaboration != null)
+ {
+ IFacility facility = activeCollaboration.getFacility(type);
+ setActiveFacility(activeCollaboration, facility);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsView.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsView.java
new file mode 100644
index 0000000000..5bfb94524d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/CollaborationsView.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.internal.ui.CollaborationsItemProvider;
+import org.eclipse.net4j.buddies.internal.ui.bundle.OM;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.buddies.ui.IFacilityPaneCreator;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.container.ContainerUtil;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+import org.eclipse.net4j.util.ui.actions.SashLayoutAction;
+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
+import org.eclipse.net4j.util.ui.widgets.SashComposite;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
+
+public class CollaborationsView extends SessionManagerView
+{
+ private SashComposite sashComposite;
+
+ private Map<String, IFacilityPaneCreator> facilityPaneCreators = new HashMap<String, IFacilityPaneCreator>();
+
+ public CollaborationsView()
+ {
+ initFacilityPaneCreators();
+ }
+
+ public CollaborationsPane getCollaborationsPane()
+ {
+ return (CollaborationsPane)sashComposite.getControl2();
+ }
+
+ public Map<String, IFacilityPaneCreator> getFacilityPaneCreators()
+ {
+ return facilityPaneCreators;
+ }
+
+ @Override
+ protected Control createControl(Composite parent)
+ {
+ sashComposite = new SashComposite(parent, SWT.NONE, 10, 30)
+ {
+ @Override
+ protected Control createControl1(Composite parent)
+ {
+ return CollaborationsView.super.createControl(parent);
+ }
+
+ @Override
+ protected Control createControl2(Composite parent)
+ {
+ return new CollaborationsPane(parent, CollaborationsView.this);
+ }
+ };
+
+ IActionBars bars = getViewSite().getActionBars();
+ bars.getMenuManager().add(new Separator());
+ bars.getToolBarManager().add(new Separator());
+ getCollaborationsPane().fillActionBars(bars);
+
+ BuddiesDropAdapter.support(getViewer());
+ return sashComposite;
+ }
+
+ @Override
+ protected void queryBuddiesManager()
+ {
+ super.queryBuddiesManager();
+ getCollaborationsPane().setSession(getSession());
+ }
+
+ @Override
+ public void notifyEvent(IEvent event)
+ {
+ super.notifyEvent(event);
+ getCollaborationsPane().notifyEvent(event);
+ }
+
+ @Override
+ protected void fillLocalPullDown(IMenuManager manager)
+ {
+ super.fillLocalPullDown(manager);
+ manager.add(new Separator());
+ manager.add(new SashLayoutAction.LayoutMenu(sashComposite));
+ }
+
+ @Override
+ protected void fillContextMenu(IMenuManager manager, ITreeSelection selection)
+ {
+ super.fillContextMenu(manager, selection);
+ if (selection.size() == 1)
+ {
+ final IBuddyCollaboration collaboration = (IBuddyCollaboration)selection.getFirstElement();
+ if (collaboration != null)
+ {
+ manager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, new Separator());
+ for (IFacilityPaneCreator c : facilityPaneCreators.values())
+ {
+ String type = c.getType();
+ if (collaboration.getFacility(type) == null)
+ {
+ IAction action = new StartFacilityAction(collaboration, type, c.getImageDescriptor());
+ manager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, action);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void doubleClicked(Object object)
+ {
+ if (object instanceof IBuddyCollaboration)
+ {
+ IBuddyCollaboration collaboration = (IBuddyCollaboration)object;
+ getCollaborationsPane().setActiveCollaboration(collaboration);
+ }
+ }
+
+ @Override
+ protected IContainer<?> getContainer()
+ {
+ return getSession() != null ? getSession().getSelf() : ContainerUtil.emptyContainer();
+ }
+
+ @Override
+ protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider()
+ {
+ return new CollaborationsItemProvider()
+ {
+ @Override
+ public Font getFont(Object obj)
+ {
+ if (obj instanceof IBuddyCollaboration)
+ {
+ if (obj == getCollaborationsPane().getActiveCollaboration())
+ {
+ return getBold();
+ }
+ }
+
+ return super.getFont(obj);
+ }
+ };
+ }
+
+ protected void initFacilityPaneCreators()
+ {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IConfigurationElement[] elements = registry.getConfigurationElementsFor(OM.BUNDLE_ID, OM.EXT_POINT);
+ for (final IConfigurationElement element : elements)
+ {
+ if ("facilityPaneCreator".equals(element.getName())) //$NON-NLS-1$
+ {
+ try
+ {
+ IFacilityPaneCreator creator = (IFacilityPaneCreator)element.createExecutableExtension("class"); //$NON-NLS-1$
+ facilityPaneCreators.put(creator.getType(), creator);
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class StartFacilityAction extends SafeAction
+ {
+ private final String type;
+
+ private IBuddyCollaboration collaboration;
+
+ private StartFacilityAction(IBuddyCollaboration collaboration, String type, ImageDescriptor descriptor)
+ {
+ super(MessageFormat.format(Messages.getString("CollaborationsView_2"), StringUtil.cap(type)), AS_RADIO_BUTTON); //$NON-NLS-1$
+ setToolTipText(MessageFormat.format(Messages.getString("CollaborationsView_3"), type)); //$NON-NLS-1$
+ setImageDescriptor(descriptor);
+ this.collaboration = collaboration;
+ this.type = type;
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ collaboration.installFacility(type);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/FacilityPane.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/FacilityPane.java
new file mode 100644
index 0000000000..866cd663ab
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/FacilityPane.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.internal.ui.bundle.OM;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.ui.UIUtil;
+
+import org.eclipse.jface.action.CoolBarManager;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.ICoolBarManager;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.CoolBar;
+import org.eclipse.swt.widgets.Layout;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class FacilityPane extends Composite implements IListener
+{
+ private IFacility facility;
+
+ private CollaborationsPane collaborationsPane;
+
+ private CoolBarManager coolBarManager;
+
+ private Control control;
+
+ public FacilityPane(CollaborationsPane collaborationsPane, int style)
+ {
+ super(collaborationsPane, style);
+ this.collaborationsPane = collaborationsPane;
+ setLayout(new FacilityPaneLayout());
+
+ ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT | SWT.RIGHT | SWT.WRAP);
+ fillCoolBar(toolBarManager);
+
+ coolBarManager = new CoolBarManager(SWT.FLAT | SWT.RIGHT | SWT.WRAP);
+ coolBarManager.add(toolBarManager);
+ coolBarManager.setLockLayout(true);
+ coolBarManager.createControl(this);
+ coolBarManager.update(true);
+
+ Composite composite = new Composite(this, SWT.NONE);
+ composite.setLayout(UIUtil.createGridLayout(1));
+
+ control = createUI(composite);
+ control.setLayoutData(UIUtil.createGridData());
+ }
+
+ @Override
+ public void dispose()
+ {
+ facility.removeListener(this);
+ coolBarManager.dispose();
+ super.dispose();
+ }
+
+ public IFacility getFacility()
+ {
+ return facility;
+ }
+
+ public void setFacility(IFacility facility)
+ {
+ this.facility = facility;
+ facility.addListener(this);
+ }
+
+ public CollaborationsPane getCollaborationsPane()
+ {
+ return collaborationsPane;
+ }
+
+ public ICoolBarManager getCoolBarManager()
+ {
+ return coolBarManager;
+ }
+
+ public Control getControl()
+ {
+ return control;
+ }
+
+ public final void notifyEvent(final IEvent event)
+ {
+ try
+ {
+ control.getDisplay().syncExec(new Runnable()
+ {
+ public void run()
+ {
+ try
+ {
+ handleEvent(event);
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ });
+ }
+ catch (RuntimeException ignore)
+ {
+ }
+ }
+
+ protected abstract void handleEvent(IEvent event) throws Exception;
+
+ public void hidden(FacilityPane newPane)
+ {
+ }
+
+ public void showed(FacilityPane oldPane)
+ {
+ }
+
+ protected abstract Control createUI(Composite parent);
+
+ protected CoolBar getCoolBarControl()
+ {
+ if (coolBarManager != null)
+ {
+ return coolBarManager.getControl();
+ }
+
+ return null;
+ }
+
+ protected void fillCoolBar(IContributionManager manager)
+ {
+ }
+
+ /**
+ * @author Eike Stepper
+ * @see org.eclipse.jface.window.ApplicationWindow.ApplicationWindowLayout
+ */
+ public class FacilityPaneLayout extends Layout
+ {
+ static final int BAR_SIZE = 23;
+
+ @Override
+ protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache)
+ {
+ if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)
+ {
+ return new Point(wHint, hHint);
+ }
+
+ Point result = new Point(0, 0);
+ Control[] ws = composite.getChildren();
+ for (int i = 0; i < ws.length; i++)
+ {
+ Control w = ws[i];
+ boolean hide = false;
+ if (w == getCoolBarControl())
+ {
+ if (!coolBarChildrenExist())
+ {
+ hide = true;
+ result.y += BAR_SIZE;
+ }
+ }
+ else if (i > 0)
+ {
+ hide = false;
+ }
+
+ if (!hide)
+ {
+ Point e = w.computeSize(wHint, hHint, flushCache);
+ result.x = Math.max(result.x, e.x);
+ result.y += e.y;
+ }
+ }
+
+ if (wHint != SWT.DEFAULT)
+ {
+ result.x = wHint;
+ }
+
+ if (hHint != SWT.DEFAULT)
+ {
+ result.y = hHint;
+ }
+
+ return result;
+ }
+
+ @Override
+ protected void layout(Composite composite, boolean flushCache)
+ {
+ Rectangle clientArea = composite.getClientArea();
+ Control[] ws = composite.getChildren();
+ for (int i = 0; i < ws.length; i++)
+ {
+ Control w = ws[i];
+ if (w == getCoolBarControl())
+ {
+ if (coolBarChildrenExist())
+ {
+ Point e = w.computeSize(clientArea.width, SWT.DEFAULT, flushCache);
+ w.setBounds(clientArea.x, clientArea.y, clientArea.width, e.y);
+ clientArea.y += e.y;
+ clientArea.height -= e.y;
+ }
+ }
+ else
+ {
+ w.setBounds(clientArea.x, clientArea.y, clientArea.width, clientArea.height);
+ }
+ }
+ }
+
+ protected boolean coolBarChildrenExist()
+ {
+ CoolBar coolBarControl = getCoolBarControl();
+ if (coolBarControl != null)
+ {
+ return coolBarControl.getItemCount() > 0;
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/SessionManagerView.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/SessionManagerView.java
new file mode 100644
index 0000000000..1162a5e3a7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/SessionManagerView.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.internal.ui.views;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.ISessionManagerEvent;
+import org.eclipse.net4j.buddies.common.IBuddyStateEvent;
+import org.eclipse.net4j.buddies.internal.ui.BuddiesItemProvider;
+import org.eclipse.net4j.buddies.internal.ui.actions.ConnectAction;
+import org.eclipse.net4j.buddies.internal.ui.actions.DisconnectAction;
+import org.eclipse.net4j.buddies.internal.ui.actions.FlashAction;
+import org.eclipse.net4j.buddies.internal.ui.actions.ReconnectAction;
+import org.eclipse.net4j.buddies.internal.ui.actions.StateAction.DropDownAction;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
+import org.eclipse.net4j.util.ui.views.ContainerView;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public abstract class SessionManagerView extends ContainerView implements IListener
+{
+ private IBuddySession session;
+
+ private ConnectAction connectAction = new ConnectAction();
+
+ private DisconnectAction disconnectAction = new DisconnectAction();
+
+ private ReconnectAction reconnectAction = new ReconnectAction();
+
+ private FlashAction flashAction = new FlashAction();
+
+ private DropDownAction dropDownAction = new DropDownAction();
+
+ private Control control;
+
+ public SessionManagerView()
+ {
+ }
+
+ public IBuddySession getSession()
+ {
+ return session;
+ }
+
+ @Override
+ public void dispose()
+ {
+ ISessionManager.INSTANCE.removeListener(this);
+ session = null;
+ super.dispose();
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (event instanceof ISessionManagerEvent)
+ {
+ queryBuddiesManager();
+ }
+ else if (event instanceof IBuddyStateEvent)
+ {
+ if (session != null && event.getSource() == session.getSelf())
+ {
+ updateState();
+ }
+ }
+ }
+
+ @Override
+ protected final Control createUI(Composite parent)
+ {
+ control = createControl(parent);
+ queryBuddiesManager();
+ ISessionManager.INSTANCE.addListener(this);
+ return control;
+ }
+
+ protected Control createControl(Composite parent)
+ {
+ return super.createUI(parent);
+ }
+
+ @Override
+ protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider()
+ {
+ return new BuddiesItemProvider();
+ }
+
+ @Override
+ protected void fillLocalToolBar(IToolBarManager manager)
+ {
+ super.fillLocalToolBar(manager);
+ manager.add(dropDownAction);
+ }
+
+ @Override
+ protected void fillLocalPullDown(IMenuManager manager)
+ {
+ manager.add(connectAction);
+ manager.add(disconnectAction);
+ manager.add(reconnectAction);
+ manager.add(new Separator());
+ manager.add(flashAction);
+ super.fillLocalPullDown(manager);
+ }
+
+ protected void queryBuddiesManager()
+ {
+ IBuddySession oldSession = session;
+ session = ISessionManager.INSTANCE.getSession();
+ if (oldSession != session)
+ {
+ if (oldSession != null)
+ {
+ oldSession.removeListener(this);
+ oldSession.getSelf().removeListener(this);
+ }
+
+ if (session != null)
+ {
+ session.addListener(this);
+ session.getSelf().addListener(this);
+ }
+ }
+
+ resetInput();
+ updateState();
+ }
+
+ protected void updateState()
+ {
+ connectAction.setEnabled(session == null);
+ disconnectAction.setEnabled(session != null);
+ reconnectAction.setEnabled(session != null);
+ flashAction.setEnabled(session != null && !ISessionManager.INSTANCE.isFlashing());
+ dropDownAction.updateState();
+ // control.setEnabled(session != null);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/ui/IFacilityPaneCreator.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/ui/IFacilityPaneCreator.java
new file mode 100644
index 0000000000..73000c2430
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies.ui/src/org/eclipse/net4j/buddies/ui/IFacilityPaneCreator.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies.ui;
+
+import org.eclipse.net4j.buddies.internal.ui.views.CollaborationsPane;
+import org.eclipse.net4j.buddies.internal.ui.views.FacilityPane;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IFacilityPaneCreator
+{
+ public String getType();
+
+ public ImageDescriptor getImageDescriptor();
+
+ public FacilityPane createPane(CollaborationsPane collaborationsPane, int style);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.options b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.options
new file mode 100644
index 0000000000..cdd0a9dd46
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.buddies/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.project b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.project
new file mode 100644
index 0000000000..4e8bcf5e64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.buddies</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..4a6632f568
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:58:49 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..7bc534ca41
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.buddies; singleton:=true
+Bundle-Version: 4.0.100.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-Activator: org.eclipse.net4j.internal.buddies.bundle.OM$Activator
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.buddies.common;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Export-Package: org.eclipse.net4j.buddies;version="4.0.100",
+ org.eclipse.net4j.internal.buddies;version="4.0.100";x-friends:="org.eclipse.net4j.buddies.ui",
+ org.eclipse.net4j.internal.buddies.bundle;version="4.0.100";x-friends:="org.eclipse.net4j.buddies.ui",
+ org.eclipse.net4j.internal.buddies.protocol;version="4.0.100";x-friends:="org.eclipse.net4j.buddies.ui"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.ini b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.ini
new file mode 100644
index 0000000000..b7e87ca285
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.mappings b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.mappings
new file mode 100644
index 0000000000..bddaab4310
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@ \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.properties
new file mode 100644
index 0000000000..55d68c3493
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/about.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = Net4j Buddies
+featureText = Net4j Buddies\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others. All rights reserved.\n\
+\n\
+Visit http://wiki.eclipse.org/Net4j
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/build.properties
new file mode 100644
index 0000000000..4b51de760c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/build.properties
@@ -0,0 +1,28 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = .,\
+ META-INF/,\
+ plugin.properties,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ modeling32.png
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/modeling32.png b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/modeling32.png
new file mode 100644
index 0000000000..6b08de2ada
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/plugin.properties
new file mode 100644
index 0000000000..01a97a552e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Buddies
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java
new file mode 100644
index 0000000000..bab955a655
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies;
+
+import org.eclipse.net4j.buddies.spi.common.ClientFacilityFactory;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.internal.buddies.protocol.BuddiesClientProtocol;
+import org.eclipse.net4j.internal.buddies.protocol.OpenSessionRequest;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.container.IPluginContainer;
+
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public final class BuddiesUtil
+{
+ private BuddiesUtil()
+ {
+ }
+
+ public static Set<String> getFacilityTypes()
+ {
+ return IPluginContainer.INSTANCE.getFactoryTypes(ClientFacilityFactory.PRODUCT_GROUP);
+ }
+
+ public static IBuddySession openSession(IConnector connector, String userID, String password, long timeout)
+ {
+ try
+ {
+ BuddiesClientProtocol protocol = new BuddiesClientProtocol(connector);
+ OpenSessionRequest request = new OpenSessionRequest(protocol, userID, password, getFacilityTypes());
+ return request.send(timeout);
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ public static IBuddySession openSession(IConnector connector, String userID, String password)
+ {
+ return openSession(connector, userID, password, RequestWithConfirmation.NO_TIMEOUT);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java
new file mode 100644
index 0000000000..b3909297b7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.ICollaboration;
+import org.eclipse.net4j.buddies.common.IFacility;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddyCollaboration extends ICollaboration
+{
+ public IBuddySession getSession();
+
+ public IFacility installFacility(String type);
+
+ public IBuddy[] invite(String... userIDs);
+
+ public void invite(IBuddy... buddies);
+
+ public void leave();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddySession.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddySession.java
new file mode 100644
index 0000000000..32bd044193
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/IBuddySession.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyContainer;
+import org.eclipse.net4j.buddies.common.ISession;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IBuddySession extends ISession, IBuddyContainer
+{
+ public IBuddy getSelf();
+
+ public void close();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManager.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManager.java
new file mode 100644
index 0000000000..1ac90de932
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManager.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies;
+
+import org.eclipse.net4j.util.event.INotifier;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ISessionManager extends INotifier
+{
+ public static final ISessionManager INSTANCE = org.eclipse.net4j.internal.buddies.SessionManager.INSTANCE;
+
+ public IBuddySession getSession();
+
+ public State getState();
+
+ public boolean isConnecting();
+
+ public void connect();
+
+ public void disconnect();
+
+ public void flashMe();
+
+ public boolean isFlashing();
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum State
+ {
+ CONNECTING, CONNECTED, DISCONNECTED
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManagerEvent.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManagerEvent.java
new file mode 100644
index 0000000000..d34e1aa7f0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/buddies/ISessionManagerEvent.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.buddies;
+
+import org.eclipse.net4j.util.event.IEvent;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ISessionManagerEvent extends IEvent
+{
+ public ISessionManager.State getOldState();
+
+ public ISessionManager.State getNewState();
+
+ public IBuddySession getSession();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java
new file mode 100644
index 0000000000..5196f4a678
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies;
+
+import org.eclipse.net4j.buddies.IBuddyCollaboration;
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.common.IMessage;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.buddies.internal.common.protocol.CollaborationLeftNotification;
+import org.eclipse.net4j.buddies.internal.common.protocol.MessageNotification;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.spi.common.ClientFacilityFactory;
+import org.eclipse.net4j.buddies.spi.common.Message;
+import org.eclipse.net4j.internal.buddies.protocol.BuddiesClientProtocol;
+import org.eclipse.net4j.internal.buddies.protocol.InstallFacilityRequest;
+import org.eclipse.net4j.internal.buddies.protocol.InviteBuddiesNotification;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.container.IPluginContainer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyCollaboration extends Collaboration implements IBuddyCollaboration
+{
+ private static final String FACILITY_GROUP = ClientFacilityFactory.PRODUCT_GROUP;
+
+ private IBuddySession session;
+
+ public BuddyCollaboration(IBuddySession session, long id)
+ {
+ super(id);
+ this.session = session;
+ }
+
+ public IBuddySession getSession()
+ {
+ return session;
+ }
+
+ public IFacility installFacility(String type)
+ {
+ return installFacility(type, true);
+ }
+
+ public IFacility installFacility(String type, boolean request)
+ {
+ IFacility facility = createFacility(type);
+ if (request)
+ {
+ try
+ {
+ BuddiesClientProtocol protocol = (BuddiesClientProtocol)session.getProtocol();
+ boolean success = new InstallFacilityRequest(protocol, getID(), type).send(ProtocolConstants.TIMEOUT);
+ if (!success)
+ {
+ return null;
+ }
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ addFacility(facility, !request);
+ return facility;
+ }
+
+ public IFacility createFacility(String type)
+ {
+ IFacility facility = (IFacility)getContainer().getElement(FACILITY_GROUP, type, String.valueOf(getID()));
+ facility.setCollaboration(this);
+ return facility;
+ }
+
+ @Override
+ public void sendMessage(long collaborationID, String facilityType, IMessage message)
+ {
+ if (message instanceof Message)
+ {
+ ((Message)message).setSenderID(session.getSelf().getUserID());
+ }
+
+ try
+ {
+ BuddiesClientProtocol protocol = (BuddiesClientProtocol)session.getProtocol();
+ new MessageNotification(protocol, collaborationID, facilityType, message).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ public IBuddy[] invite(String... userIDs)
+ {
+ List<IBuddy> buddies = new ArrayList<IBuddy>();
+ for (String userID : userIDs)
+ {
+ IBuddy buddy = session.getBuddy(userID);
+ buddies.add(buddy);
+ }
+
+ IBuddy[] array = buddies.toArray(new IBuddy[buddies.size()]);
+ invite(array);
+ return array;
+ }
+
+ public void invite(IBuddy... buddies)
+ {
+ List<IBuddy> invitations = new ArrayList<IBuddy>();
+ for (IBuddy buddy : buddies)
+ {
+ if (getMembership(buddy) == null)
+ {
+ invitations.add(buddy);
+ }
+ }
+
+ if (!invitations.isEmpty())
+ {
+ try
+ {
+ BuddiesClientProtocol protocol = (BuddiesClientProtocol)session.getProtocol();
+ new InviteBuddiesNotification(protocol, getID(), invitations).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+ }
+
+ public void leave()
+ {
+ try
+ {
+ BuddiesClientProtocol protocol = (BuddiesClientProtocol)session.getProtocol();
+ new CollaborationLeftNotification(protocol, getID(), session.getSelf().getUserID()).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+
+ deactivate();
+ }
+
+ protected IManagedContainer getContainer()
+ {
+ return IPluginContainer.INSTANCE;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java
new file mode 100644
index 0000000000..dc19ff82a2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.common.Buddy;
+
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class ClientBuddy extends Buddy
+{
+ private String userID;
+
+ private IAccount account;
+
+ public ClientBuddy(ClientSession session, String userID)
+ {
+ super(session, null);
+ this.userID = userID;
+ }
+
+ @Override
+ public ClientSession getSession()
+ {
+ return (ClientSession)super.getSession();
+ }
+
+ public String getUserID()
+ {
+ return userID;
+ }
+
+ public IAccount getAccount()
+ {
+ if (account == null)
+ {
+ account = loadAccount(userID);
+ }
+
+ return account;
+ }
+
+ public IMembership[] initiate(Collection<IBuddy> buddies)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public IMembership join(long collaborationID)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public IMembership join(Object invitationToken)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ protected IAccount loadAccount(String userID)
+ {
+ // TODO Implement method ClientBuddy.loadAccount()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected Set<String> loadFacilityTypes()
+ {
+ // TODO Implement method ClientBuddy.loadFacilityTypes()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java
new file mode 100644
index 0000000000..0cc7a39c04
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IBuddyStateEvent;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.common.BuddyContainer;
+import org.eclipse.net4j.buddies.internal.common.Collaboration;
+import org.eclipse.net4j.buddies.internal.common.protocol.BuddyStateNotification;
+import org.eclipse.net4j.internal.buddies.bundle.OM;
+import org.eclipse.net4j.internal.buddies.protocol.BuddiesClientProtocol;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.log.OMLogger;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class ClientSession extends BuddyContainer implements IBuddySession
+{
+ private BuddiesClientProtocol protocol;
+
+ private Self self;
+
+ public ClientSession(BuddiesClientProtocol protocol)
+ {
+ this.protocol = protocol;
+ }
+
+ public BuddiesClientProtocol getProtocol()
+ {
+ return protocol;
+ }
+
+ public Self getSelf()
+ {
+ return self;
+ }
+
+ public void setSelf(IAccount account, Set<String> facilityTypes)
+ {
+ self = new Self(this, account, facilityTypes);
+ self.activate();
+ self.addListener(this);
+ }
+
+ public void close()
+ {
+ protocol.close();
+ protocol = null;
+ LifecycleUtil.deactivate(this, OMLogger.Level.DEBUG);
+ }
+
+ /**
+ * @see PlatformObject#getAdapter(Class)
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class adapter)
+ {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ @Override
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() == protocol)
+ {
+ if (event instanceof ILifecycleEvent)
+ {
+ if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ deactivate();
+ }
+ }
+ }
+ else if (event.getSource() == self)
+ {
+ if (event instanceof IBuddyStateEvent)
+ {
+ try
+ {
+ new BuddyStateNotification(protocol, self.getUserID(), ((IBuddyStateEvent)event).getNewState()).sendAsync();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+ }
+
+ public void buddyAdded(String userID)
+ {
+ ClientBuddy buddy = new ClientBuddy(this, userID);
+ buddy.activate();
+ addBuddy(buddy);
+ }
+
+ public void buddyRemoved(String userID)
+ {
+ IBuddy buddy = removeBuddy(userID);
+ if (buddy != null)
+ {
+ for (IMembership membership : self.getMemberships())
+ {
+ Collaboration collaboration = (Collaboration)membership.getCollaboration();
+ collaboration.removeMembership(buddy);
+ }
+
+ LifecycleUtil.deactivate(buddy);
+ }
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ protocol.addListener(this);
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ protocol.removeListener(this);
+ LifecycleUtil.deactivate(self);
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/Self.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/Self.java
new file mode 100644
index 0000000000..f41bc96c32
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/Self.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.common.IMembership;
+import org.eclipse.net4j.buddies.internal.common.Buddy;
+import org.eclipse.net4j.buddies.internal.common.Membership;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.internal.buddies.protocol.InitiateCollaborationRequest;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class Self extends Buddy
+{
+ private IAccount account;
+
+ protected Self(ClientSession session, IAccount account, Set<String> facilityTypes)
+ {
+ super(session, facilityTypes);
+ this.account = account;
+ }
+
+ @Override
+ public ClientSession getSession()
+ {
+ return (ClientSession)super.getSession();
+ }
+
+ public String getUserID()
+ {
+ return account.getUserID();
+ }
+
+ public IAccount getAccount()
+ {
+ return account;
+ }
+
+ public IMembership[] initiate(Collection<IBuddy> buddies)
+ {
+ try
+ {
+ ClientSession session = getSession();
+ long id = new InitiateCollaborationRequest(session.getProtocol(), buddies).send(ProtocolConstants.TIMEOUT);
+
+ BuddyCollaboration collaboration = new BuddyCollaboration(session, id);
+ collaboration.activate();
+ Membership.create(this, collaboration);
+
+ List<IMembership> memberships = new ArrayList<IMembership>();
+ for (IBuddy buddy : buddies)
+ {
+ IMembership membership = Membership.create(buddy, collaboration);
+ memberships.add(membership);
+ }
+
+ return memberships.toArray(new IMembership[memberships.size()]);
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ public IMembership join(long collaborationID)
+ {
+ // TODO Implement method Self.join()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+
+ public IMembership join(Object invitationToken)
+ {
+ // TODO Implement method Self.join()
+ throw new UnsupportedOperationException("Not yet implemented"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ for (IMembership membership : getMemberships())
+ {
+ LifecycleUtil.deactivate(membership.getCollaboration());
+ }
+
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/SessionManager.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/SessionManager.java
new file mode 100644
index 0000000000..ccd7cf8f85
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/SessionManager.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies;
+
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.buddies.BuddiesUtil;
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.ISessionManagerEvent;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.internal.buddies.bundle.OM;
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+import org.eclipse.net4j.util.container.IContainerDelta;
+import org.eclipse.net4j.util.container.IContainerEvent;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.event.Event;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import java.text.MessageFormat;
+
+public class SessionManager extends Lifecycle implements ISessionManager, IListener
+{
+ public static final SessionManager INSTANCE = new SessionManager();
+
+ private IBuddySession session;
+
+ private State state = State.DISCONNECTED;
+
+ private boolean connecting;
+
+ private boolean flashing;
+
+ private SessionManager()
+ {
+ }
+
+ public IBuddySession getSession()
+ {
+ return session;
+ }
+
+ public State getState()
+ {
+ return state;
+ }
+
+ public void setState(State state)
+ {
+ if (this.state != state)
+ {
+ IEvent event = new SessionManagerEvent(this.state, state, session);
+ this.state = state;
+ IListener[] listeners = getListeners();
+ if (listeners != null)
+ {
+ fireEvent(event, listeners);
+ }
+ }
+ }
+
+ public boolean isFlashing()
+ {
+ return flashing;
+ }
+
+ public boolean isConnecting()
+ {
+ return state == ISessionManager.State.CONNECTING;
+ }
+
+ public String getConnectorDescription()
+ {
+ return OM.PREF_CONNECTOR_DESCRIPTION.getValue();
+ }
+
+ public String getUserID()
+ {
+ return OM.PREF_USER_ID.getValue();
+ }
+
+ public String getPassword()
+ {
+ return OM.PREF_PASSWORD.getValue();
+ }
+
+ public Boolean isAutoConnect()
+ {
+ return OM.PREF_AUTO_CONNECT.getValue();
+ }
+
+ public void connect()
+ {
+ new Thread("buddies-connector") //$NON-NLS-1$
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ setState(ISessionManager.State.CONNECTING);
+ connecting = true;
+ while (session == null && connecting)
+ {
+ IConnector connector = Net4jUtil.getConnector(IPluginContainer.INSTANCE, getConnectorDescription());
+ if (connector == null)
+ {
+ throw new IllegalStateException("connector == null"); //$NON-NLS-1$
+ }
+
+ session = BuddiesUtil.openSession(connector, getUserID(), getPassword(), 5000L);
+ if (session != null)
+ {
+ if (connecting)
+ {
+ session.addListener(SessionManager.this);
+ setState(ISessionManager.State.CONNECTED);
+ }
+ else
+ {
+ session.close();
+ session = null;
+ setState(ISessionManager.State.DISCONNECTED);
+ }
+ }
+ }
+ }
+ finally
+ {
+ connecting = false;
+ }
+ }
+ }.start();
+ }
+
+ public void disconnect()
+ {
+ connecting = false;
+ if (session != null)
+ {
+ session.removeListener(this);
+ session.close();
+ session = null;
+ }
+
+ setState(ISessionManager.State.DISCONNECTED);
+ }
+
+ public void flashMe()
+ {
+ if (session != null && !flashing)
+ {
+ final Self self = (Self)session.getSelf();
+ final IBuddy.State original = self.getState();
+ new Thread("buddies-flasher") //$NON-NLS-1$
+ {
+ @Override
+ public void run()
+ {
+ flashing = true;
+ IBuddy.State state = original == IBuddy.State.AVAILABLE ? IBuddy.State.LONESOME : IBuddy.State.AVAILABLE;
+ for (int i = 0; i < 15; i++)
+ {
+ self.setState(state);
+ ConcurrencyUtil.sleep(200);
+ state = state == IBuddy.State.AVAILABLE ? IBuddy.State.LONESOME : IBuddy.State.AVAILABLE;
+ }
+
+ self.setState(original);
+ flashing = false;
+ }
+ }.start();
+ }
+ }
+
+ public void notifyEvent(IEvent event)
+ {
+ if (event.getSource() == session)
+ {
+ if (event instanceof ILifecycleEvent)
+ {
+ if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ disconnect();
+ if (isAutoConnect())
+ {
+ connect();
+ }
+ }
+ }
+ else if (event instanceof IContainerEvent<?>)
+ {
+ @SuppressWarnings("unchecked")
+ IContainerEvent<IBuddy> e = (IContainerEvent<IBuddy>)event;
+ if (e.getDeltaKind() == IContainerDelta.Kind.ADDED)
+ {
+ e.getDeltaElement().addListener(this);
+ }
+ else if (e.getDeltaKind() == IContainerDelta.Kind.REMOVED)
+ {
+ e.getDeltaElement().removeListener(this);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ if (isAutoConnect())
+ {
+ connect();
+ }
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ disconnect();
+ super.doDeactivate();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class SessionManagerEvent extends Event implements ISessionManagerEvent
+ {
+ private static final long serialVersionUID = 1L;
+
+ private State oldState;
+
+ private State newState;
+
+ private IBuddySession session;
+
+ public SessionManagerEvent(State oldState, State newState, IBuddySession session)
+ {
+ super(SessionManager.this);
+ this.oldState = oldState;
+ this.newState = newState;
+ this.session = session;
+ }
+
+ public State getOldState()
+ {
+ return oldState;
+ }
+
+ public State getNewState()
+ {
+ return newState;
+ }
+
+ public IBuddySession getSession()
+ {
+ return session;
+ }
+
+ @Override
+ public String toString()
+ {
+ return MessageFormat.format("SessionManagerEvent[source={0}, oldState={1}, newState={2}, session={3}]", //$NON-NLS-1$
+ getSource(), getOldState(), getNewState(), getSession());
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/bundle/OM.java
new file mode 100644
index 0000000000..b61a2fbbe8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/bundle/OM.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.pref.OMPreference;
+import org.eclipse.net4j.util.om.pref.OMPreferences;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.buddies"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ public static final OMPreferences PREFS = BUNDLE.preferences();
+
+ public static final OMPreference<String> PREF_CONNECTOR_DESCRIPTION = //
+ PREFS.init("PREF_CONNECTOR_DESCRIPTION", "tcp://localhost"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ public static final OMPreference<String> PREF_USER_ID = //
+ PREFS.init("PREF_USER_ID", System.getProperty("user.name")); //$NON-NLS-1$ //$NON-NLS-2$
+
+ public static final OMPreference<String> PREF_PASSWORD = //
+ PREFS.initString("PREF_PASSWORD"); //$NON-NLS-1$
+
+ public static final OMPreference<Boolean> PREF_AUTO_CONNECT = //
+ PREFS.init("PREF_AUTO_CONNECT", false); //$NON-NLS-1$
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddiesClientProtocol.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddiesClientProtocol.java
new file mode 100644
index 0000000000..bbb780c94c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddiesClientProtocol.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.common.ISession;
+import org.eclipse.net4j.buddies.internal.common.protocol.MessageIndication;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.internal.buddies.ClientSession;
+import org.eclipse.net4j.internal.buddies.Self;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.signal.SignalReactor;
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddiesClientProtocol extends SignalProtocol<ClientSession>
+{
+ private static final long GET_SESSION_TIMEOUT = 20000;
+
+ private static final int GET_SESSION_INTERVAL = 100;
+
+ public BuddiesClientProtocol(IConnector connector)
+ {
+ super(ProtocolConstants.PROTOCOL_NAME);
+ open(connector);
+ }
+
+ @Override
+ protected SignalReactor createSignalReactor(short signalID)
+ {
+ switch (signalID)
+ {
+ case ProtocolConstants.SIGNAL_BUDDY_ADDED:
+ return new BuddyAddedIndication(this);
+
+ case ProtocolConstants.SIGNAL_BUDDY_REMOVED:
+ return new BuddyRemovedIndication(this);
+
+ case ProtocolConstants.SIGNAL_BUDDY_STATE:
+ return new ClientBuddyStateIndication(this);
+
+ case ProtocolConstants.SIGNAL_COLLABORATION_INITIATED:
+ return new CollaborationInitiatedIndication(this);
+
+ case ProtocolConstants.SIGNAL_COLLABORATION_LEFT:
+ return new ClientCollaborationLeftIndication(this, getSelf());
+
+ case ProtocolConstants.SIGNAL_FACILITY_INSTALLED:
+ return new FacilityInstalledIndication(this);
+
+ case ProtocolConstants.SIGNAL_MESSAGE:
+ return new MessageIndication(this, getSelf());
+
+ default:
+ return super.createSignalReactor(signalID);
+ }
+ }
+
+ protected Self getSelf()
+ {
+ ISession session = getInfraStructure();
+ return (Self)session.getSelf();
+ }
+
+ public ClientSession getSession()
+ {
+ int max = (int)(GET_SESSION_TIMEOUT / GET_SESSION_INTERVAL);
+ for (int i = 0; i < max; i++)
+ {
+ ClientSession session = getInfraStructure();
+ if (session == null)
+ {
+ ConcurrencyUtil.sleep(GET_SESSION_INTERVAL);
+ }
+ else
+ {
+ return session;
+ }
+ }
+
+ throw new IllegalStateException("No session after " + max + " milliseconds"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java
new file mode 100644
index 0000000000..f92f2730a3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.internal.buddies.ClientSession;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyAddedIndication extends Indication
+{
+ public BuddyAddedIndication(SignalProtocol<?> protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_BUDDY_ADDED);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String buddy = in.readString();
+ ClientSession session = ((BuddiesClientProtocol)getProtocol()).getSession();
+ session.buddyAdded(buddy);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java
new file mode 100644
index 0000000000..36072df9a7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.internal.buddies.ClientSession;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class BuddyRemovedIndication extends Indication
+{
+ public BuddyRemovedIndication(SignalProtocol<?> protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_BUDDY_REMOVED);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String buddy = in.readString();
+ ClientSession session = ((BuddiesClientProtocol)getProtocol()).getSession();
+ session.buddyRemoved(buddy);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java
new file mode 100644
index 0000000000..a4824c5440
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy.State;
+import org.eclipse.net4j.buddies.internal.common.protocol.BuddyStateIndication;
+import org.eclipse.net4j.internal.buddies.ClientBuddy;
+import org.eclipse.net4j.internal.buddies.ClientSession;
+
+/**
+ * @author Eike Stepper
+ */
+public class ClientBuddyStateIndication extends BuddyStateIndication
+{
+ public ClientBuddyStateIndication(BuddiesClientProtocol protocol)
+ {
+ super(protocol);
+ }
+
+ @Override
+ protected void stateChanged(final String userID, final State state)
+ {
+ ClientSession session = ((BuddiesClientProtocol)getProtocol()).getSession();
+ ClientBuddy buddy = (ClientBuddy)session.getBuddy(userID);
+ if (buddy != null)
+ {
+ buddy.setState(state);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java
new file mode 100644
index 0000000000..4180c89e59
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.CollaborationLeftIndication;
+import org.eclipse.net4j.internal.buddies.Self;
+
+/**
+ * @author Eike Stepper
+ */
+public class ClientCollaborationLeftIndication extends CollaborationLeftIndication
+{
+ public ClientCollaborationLeftIndication(BuddiesClientProtocol protocol, Self self)
+ {
+ super(protocol, self.getSession(), self);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java
new file mode 100644
index 0000000000..9deee5b493
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.common.Membership;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.internal.buddies.BuddyCollaboration;
+import org.eclipse.net4j.internal.buddies.Self;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class CollaborationInitiatedIndication extends Indication
+{
+ public CollaborationInitiatedIndication(BuddiesClientProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_COLLABORATION_INITIATED);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ IBuddySession session = (IBuddySession)getProtocol().getInfraStructure();
+ Self self = (Self)session.getSelf();
+
+ long collaborationID = in.readLong();
+ Set<IBuddy> buddies = ProtocolUtil.readBuddies(in, session);
+ String[] facilityTypes = ProtocolUtil.readFacilityTypes(in);
+
+ BuddyCollaboration collaboration = (BuddyCollaboration)self.getCollaboration(collaborationID);
+ if (collaboration == null)
+ {
+ collaboration = new BuddyCollaboration(session, collaborationID);
+ collaboration.activate();
+
+ Membership.create(self, collaboration);
+ for (IBuddy buddy : buddies)
+ {
+ Membership.create(buddy, collaboration);
+ }
+ }
+ else
+ {
+ for (IBuddy buddy : buddies)
+ {
+ Membership.create(buddy, collaboration);
+ }
+ }
+
+ for (String facilityType : facilityTypes)
+ {
+ collaboration.installFacility(facilityType, false);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/FacilityInstalledIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/FacilityInstalledIndication.java
new file mode 100644
index 0000000000..9805413d73
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/FacilityInstalledIndication.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.IFacility;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.internal.buddies.BuddyCollaboration;
+import org.eclipse.net4j.internal.buddies.Self;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class FacilityInstalledIndication extends Indication
+{
+ public FacilityInstalledIndication(BuddiesClientProtocol protocol)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_FACILITY_INSTALLED);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ long collaborationID = in.readLong();
+ String facilityType = in.readString();
+
+ IBuddySession session = (IBuddySession)getProtocol().getInfraStructure();
+ Self self = (Self)session.getSelf();
+ BuddyCollaboration collaboration = (BuddyCollaboration)self.getCollaboration(collaborationID);
+ if (collaboration != null)
+ {
+ IFacility facility = collaboration.createFacility(facilityType);
+ collaboration.addFacility(facility, true);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java
new file mode 100644
index 0000000000..536c767f93
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.util.Collection;
+
+/**
+ * @author Eike Stepper
+ */
+public class InitiateCollaborationRequest extends RequestWithConfirmation<Long>
+{
+ private Collection<IBuddy> buddies;
+
+ public InitiateCollaborationRequest(BuddiesClientProtocol protocol, Collection<IBuddy> buddies)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_INITIATE_COLLABORATION);
+ this.buddies = buddies;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ ProtocolUtil.writeBuddies(out, buddies);
+ }
+
+ @Override
+ protected Long confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readLong();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java
new file mode 100644
index 0000000000..547ed3d3fd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class InstallFacilityRequest extends RequestWithConfirmation<Boolean>
+{
+ private long collaborationID;
+
+ private String facilityType;
+
+ public InstallFacilityRequest(BuddiesClientProtocol protocol, long collaborationID, String facilityType)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_INSTALL_FACILITY);
+ this.collaborationID = collaborationID;
+ this.facilityType = facilityType;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaborationID);
+ out.writeString(facilityType);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java
new file mode 100644
index 0000000000..0ba6ad1c81
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.common.IBuddy;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.util.Collection;
+
+/**
+ * @author Eike Stepper
+ */
+public class InviteBuddiesNotification extends Request
+{
+ private long collaborationID;
+
+ private Collection<IBuddy> buddies;
+
+ public InviteBuddiesNotification(BuddiesClientProtocol protocol, long collaborationID, Collection<IBuddy> buddies)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_INVITE_BUDDIES);
+ this.buddies = buddies;
+ this.collaborationID = collaborationID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(collaborationID);
+ ProtocolUtil.writeBuddies(out, buddies);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/LoadAccountRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/LoadAccountRequest.java
new file mode 100644
index 0000000000..0afdf839e8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/LoadAccountRequest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class LoadAccountRequest extends RequestWithConfirmation<IAccount>
+{
+ private String userID;
+
+ public LoadAccountRequest(BuddiesClientProtocol protocol, String userID)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_LOAD_ACCOUNT);
+ this.userID = userID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(userID);
+ }
+
+ @Override
+ protected IAccount confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return ProtocolUtil.readAccount(in);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java
new file mode 100644
index 0000000000..d6996af089
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.common.IAccount;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants;
+import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil;
+import org.eclipse.net4j.internal.buddies.ClientSession;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class OpenSessionRequest extends RequestWithConfirmation<IBuddySession>
+{
+ private String userID;
+
+ private String password;
+
+ private Set<String> facilityTypes;
+
+ public OpenSessionRequest(BuddiesClientProtocol protocol, String userID, String password, Set<String> facilityTypes)
+ {
+ super(protocol, ProtocolConstants.SIGNAL_OPEN_SESSION);
+ this.userID = userID;
+ this.password = password;
+ this.facilityTypes = facilityTypes;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(userID);
+ out.writeString(password);
+ out.writeInt(facilityTypes.size());
+ for (String facilityType : facilityTypes)
+ {
+ out.writeString(facilityType);
+ }
+ }
+
+ @Override
+ protected IBuddySession confirming(ExtendedDataInputStream in) throws Exception
+ {
+ IAccount account = ProtocolUtil.readAccount(in);
+ if (account == null)
+ {
+ return null;
+ }
+
+ BuddiesClientProtocol protocol = (BuddiesClientProtocol)getProtocol();
+ ClientSession session = new ClientSession(protocol);
+ protocol.setInfraStructure(session);
+ session.setSelf(account, facilityTypes);
+
+ int size = in.readInt();
+ for (int i = 0; i < size; i++)
+ {
+ session.buddyAdded(in.readString());
+ }
+
+ session.activate();
+ return session;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.options b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.options
new file mode 100644
index 0000000000..ae8a96aa5a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.options
@@ -0,0 +1,5 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.jms.admin/debug = true
+
+org.eclipse.net4j.jms.admin/debug.protocol = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.project b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.project
new file mode 100644
index 0000000000..03535e3c36
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.jms.admin</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..ad04880d1b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:59:09 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..eb37d87e4e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.net4j.jms.admin
+Bundle-Version: 4.0.100.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Activator: org.eclipse.net4j.jms.internal.admin.bundle.OM
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.jms;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Export-Package: org.eclipse.net4j.jms.admin;version="4.0.100",
+ org.eclipse.net4j.jms.internal.admin;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.jms.internal.admin.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.jms.internal.admin.protocol;version="4.0.100";x-internal:=true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/build.properties
new file mode 100644
index 0000000000..152299f8f0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/plugin.properties
new file mode 100644
index 0000000000..78a51ffc88
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j JMS Provider Admin
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/IJMSAdmin.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/IJMSAdmin.java
new file mode 100644
index 0000000000..e7a257df39
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/IJMSAdmin.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.admin;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IJMSAdmin
+{
+ public boolean createQueue(String name);
+
+ public boolean createTopic(String name);
+
+ public void close();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/JMSAdminUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/JMSAdminUtil.java
new file mode 100644
index 0000000000..9ff874795f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/admin/JMSAdminUtil.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.admin;
+
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.jms.internal.admin.JMSAdmin;
+
+/**
+ * @author Eike Stepper
+ */
+public final class JMSAdminUtil
+{
+ private JMSAdminUtil()
+ {
+ }
+
+ public static IJMSAdmin createAdmin(IConnector connector)
+ {
+ return new JMSAdmin(connector);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/JMSAdmin.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/JMSAdmin.java
new file mode 100644
index 0000000000..95c313f69b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/JMSAdmin.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.admin;
+
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.jms.JMSAdminProtocolConstants;
+import org.eclipse.net4j.jms.admin.IJMSAdmin;
+import org.eclipse.net4j.jms.internal.admin.bundle.OM;
+import org.eclipse.net4j.jms.internal.admin.protocol.JMSAdminProtocol;
+import org.eclipse.net4j.jms.internal.admin.protocol.JMSCreateDestinationRequest;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSAdmin implements IJMSAdmin
+{
+ private JMSAdminProtocol protocol;
+
+ public JMSAdmin(IConnector connector)
+ {
+ protocol = new JMSAdminProtocol(connector);
+ }
+
+ public void close()
+ {
+ protocol.close();
+ protocol = null;
+ }
+
+ public boolean createQueue(String name)
+ {
+ return createDestination(name, JMSAdminProtocolConstants.DESTINATION_TYPE_QUEUE);
+ }
+
+ public boolean createTopic(String name)
+ {
+ return createDestination(name, JMSAdminProtocolConstants.DESTINATION_TYPE_TOPIC);
+ }
+
+ private boolean createDestination(String name, byte type)
+ {
+ try
+ {
+ return new JMSCreateDestinationRequest(protocol, type, name).send();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ return false;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/bundle/OM.java
new file mode 100644
index 0000000000..17caf9e2f1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/bundle/OM.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.admin.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.jms.admin"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_PROTOCOL = DEBUG.tracer("protocol"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSAdminProtocol.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSAdminProtocol.java
new file mode 100644
index 0000000000..cd4828a584
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSAdminProtocol.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.admin.protocol;
+
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.jms.JMSAdminProtocolConstants;
+import org.eclipse.net4j.signal.SignalProtocol;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSAdminProtocol extends SignalProtocol<Object>
+{
+ public JMSAdminProtocol(IConnector connector)
+ {
+ super(JMSAdminProtocolConstants.PROTOCOL_NAME);
+ open(connector);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSCreateDestinationRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSCreateDestinationRequest.java
new file mode 100644
index 0000000000..696704d1df
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.admin/src/org/eclipse/net4j/jms/internal/admin/protocol/JMSCreateDestinationRequest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.admin.protocol;
+
+import org.eclipse.net4j.jms.JMSAdminProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSCreateDestinationRequest extends RequestWithConfirmation<Boolean>
+{
+ private byte type;
+
+ private String name;
+
+ public JMSCreateDestinationRequest(JMSAdminProtocol protocol, byte type, String name)
+ {
+ super(protocol, JMSAdminProtocolConstants.SIGNAL_CREATE_DESTINATION);
+ this.type = type;
+ this.name = name;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeByte(type);
+ out.writeString(name);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.classpath
new file mode 100644
index 0000000000..e721d0c4ea
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.project b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.project
new file mode 100644
index 0000000000..212fda7fe8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.jms.api</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..f27dabc53f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:56:11 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..0a0388fcb6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,386 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..8e3b872e01
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 11:48:02 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/CDDL.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/CDDL.html
new file mode 100644
index 0000000000..978b70815a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/CDDL.html
@@ -0,0 +1,584 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+
+
+ <head>
+ <title>
+ glassfish: GlassFish Dual License Header and License Notice GPL v2 and CDDL
+ </title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <meta name="version" content="4.5.2.148.4" />
+</head>
+
+
+<body class="composite">
+ <h3>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</h3>
+
+ <ul>
+ <li><p><b>1. Definitions.</b></p>
+ <ul>
+ <li>
+ <p>
+ <b>1.1. &ldquo;Contributor&rdquo;</b> means each individual or
+ entity that creates or contributes to the creation of
+ Modifications.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.2. &ldquo;Contributor Version&rdquo;</b> means
+ the combination of the Original Software, prior
+ Modifications used by a Contributor (if any), and the
+ Modifications made by that particular Contributor.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.3. &ldquo;Covered Software&rdquo;</b> means (a)
+ the Original Software, or (b) Modifications, or (c) the
+ combination of files containing Original Software with files
+ containing Modifications, in each case including portions
+ thereof.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.4. &ldquo;Executable&rdquo;</b> means the
+ Covered Software in any form other than Source Code.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.5. &ldquo;Initial Developer&rdquo;</b> means
+ the individual or entity that first makes Original Software
+ available under this License.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.6. &ldquo;Larger Work&rdquo;</b> means a work
+ which combines Covered Software or portions thereof with
+ code not governed by the terms of this License.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.7. &ldquo;License&rdquo;</b> means this document.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.8. &ldquo;Licensable&rdquo;</b> means having
+ the right to grant, to the maximum extent possible, whether
+ at the time of the initial grant or subsequently acquired,
+ any and all of the rights conveyed herein.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.9. &ldquo;Modifications&rdquo;</b> means the
+ Source Code and Executable form of any of the following:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <b>A.</b> Any file that results from an addition
+ to, deletion from or modification of the contents of a
+ file containing Original Software or previous
+ Modifications;
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>B.</b> Any new file that contains any part of
+ the Original Software or previous Modification; or
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>C.</b> Any new file that is contributed or
+ otherwise made available under the terms of this
+ License.
+ </p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>
+ <b>1.10. &ldquo;Original Software&rdquo;</b> means
+ the Source Code and Executable form of computer software
+ code that is originally released under this License.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.11. &ldquo;Patent Claims&rdquo;</b> means any
+ patent claim(s), now owned or hereafter acquired, including
+ without limitation, method, process, and apparatus claims,
+ in any patent Licensable by grantor.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.12. &ldquo;Source Code&rdquo;</b> means (a) the
+ common form of computer software code in which modifications
+ are made and (b) associated documentation included in or
+ with such code.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>1.13. &ldquo;You&rdquo; (or
+ &ldquo;Your&rdquo;)</b> means an individual or a legal
+ entity exercising rights under, and complying with all of
+ the terms of, this License. For legal entities,
+ &ldquo;You&rdquo; includes any entity which controls, is
+ controlled by, or is under common control with You. For
+ purposes of this definition, &ldquo;control&rdquo; means
+ (a)&nbsp;the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract
+ or otherwise, or (b)&nbsp;ownership of more than fifty
+ percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+ </p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><b>2. License Grants.</b></p>
+ <ul>
+ <li>
+ <p><b>2.1. The Initial Developer Grant.</b></p>
+ <p>
+ Conditioned upon Your compliance with Section 3.1
+ below and subject to third party intellectual property
+ claims, the Initial Developer hereby grants You a
+ world-wide, royalty-free, non-exclusive license:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <b>(a)</b> under intellectual property rights
+ (other than patent or trademark) Licensable by Initial
+ Developer, to use, reproduce, modify, display, perform,
+ sublicense and distribute the Original Software (or
+ portions thereof), with or without Modifications, and/or
+ as part of a Larger Work; and
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>(b)</b> under Patent Claims infringed by the
+ making, using or selling of Original Software, to make,
+ have made, use, practice, sell, and offer for sale,
+ and/or otherwise dispose of the Original Software (or
+ portions thereof).
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>(c)</b> The licenses granted in Sections&nbsp;2.1(a)
+ and (b) are effective on the date Initial Developer first
+ distributes or otherwise makes the Original Software
+ available to a third party under the terms of this License.
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>(d)</b> Notwithstanding Section&nbsp;2.1(b)
+ above, no patent license is granted: (1)&nbsp;for code
+ that You delete from the Original Software, or
+ (2)&nbsp;for infringements caused by: (i)&nbsp;the
+ modification of the Original Software, or (ii)&nbsp;the
+ combination of the Original Software with other software
+ or devices.
+ </p>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <p><b>2.2. Contributor Grant.</b></p>
+ <p>
+ Conditioned upon Your compliance with Section 3.1 below
+ and subject to third party intellectual property claims,
+ each Contributor hereby grants You a world-wide,
+ royalty-free, non-exclusive license:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <b>(a)</b> under intellectual property rights
+ (other than patent or trademark) Licensable by
+ Contributor to use, reproduce, modify, display, perform,
+ sublicense and distribute the Modifications created by
+ such Contributor (or portions thereof), either on an
+ unmodified basis, with other Modifications, as Covered
+ Software and/or as part of a Larger Work; and
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>(b)</b> under Patent Claims infringed by the
+ making, using, or selling of Modifications made by that
+ Contributor either alone and/or in combination with its
+ Contributor Version (or portions of such combination),
+ to make, use, sell, offer for sale, have made, and/or
+ otherwise dispose of: (1)&nbsp;Modifications made by
+ that Contributor (or portions thereof); and (2)&nbsp;the
+ combination of Modifications made by that Contributor
+ with its Contributor Version (or portions of such
+ combination).
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>(c)</b> The licenses granted in Sections&nbsp;2.2(a)
+ and 2.2(b) are effective on the date Contributor first
+ distributes or otherwise makes the Modifications available
+ to a third party.
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>(d)</b> Notwithstanding Section&nbsp;2.2(b)
+ above, no patent license is granted: (1)&nbsp;for any
+ code that Contributor has deleted from the Contributor
+ Version; (2)&nbsp;for infringements caused by:
+ (i)&nbsp;third party modifications of Contributor
+ Version, or (ii)&nbsp;the combination of Modifications
+ made by that Contributor with other software (except as
+ part of the Contributor Version) or other devices; or
+ (3)&nbsp;under Patent Claims infringed by Covered
+ Software in the absence of Modifications made by that
+ Contributor.
+ </p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><b>3. Distribution Obligations.</b></p>
+ <ul>
+ <li>
+ <p><b>3.1. Availability of Source Code.</b></p>
+ <p>
+ Any Covered Software that You distribute or otherwise
+ make available in Executable form must also be made
+ available in Source Code form and that Source Code form
+ must be distributed only under the terms of this License.
+ You must include a copy of this License with every copy of
+ the Source Code form of the Covered Software You
+ distribute or otherwise make available. You must inform
+ recipients of any such Covered Software in Executable form
+ as to how they can obtain such Covered Software in Source
+ Code form in a reasonable manner on or through a medium
+ customarily used for software exchange.
+ </p>
+ </li>
+ <li>
+ <p><b>3.2. Modifications.</b></p>
+ <p>
+ The Modifications that You create or to which You
+ contribute are governed by the terms of this License. You
+ represent that You believe Your Modifications are Your
+ original creation(s) and/or You have sufficient rights to
+ grant the rights conveyed by this License.
+ </p>
+ </li>
+ <li>
+ <p><b>3.3. Required Notices.</b></p>
+ <p>
+ You must include a notice in each of Your Modifications
+ that identifies You as the Contributor of the Modification.
+ You may not remove or alter any copyright, patent or
+ trademark notices contained within the Covered Software,
+ or any notices of licensing or any descriptive text giving
+ attribution to any Contributor or the Initial Developer.
+ </p>
+ </li>
+ <li>
+ <p><b>3.4. Application of Additional Terms.</b></p>
+ <p>
+ You may not offer or impose any terms on any Covered
+ Software in Source Code form that alters or restricts the
+ applicable version of this License or the
+ recipients&rsquo; rights hereunder. You may choose to
+ offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more
+ recipients of Covered Software. However, you may do so
+ only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely
+ clear that any such warranty, support, indemnity or
+ liability obligation is offered by You alone, and You
+ hereby agree to indemnify the Initial Developer and every
+ Contributor for any liability incurred by the Initial
+ Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+ </p>
+ </li>
+ <li>
+ <p><b>3.5. Distribution of Executable Versions.</b></p>
+ <p>
+ You may distribute the Executable form of the Covered
+ Software under the terms of this License or under the
+ terms of a license of Your choice, which may contain terms
+ different from this License, provided that You are in
+ compliance with the terms of this License and that the
+ license for the Executable form does not attempt to limit
+ or alter the recipient&rsquo;s rights in the Source Code
+ form from the rights set forth in this License. If You
+ distribute the Covered Software in Executable form under a
+ different license, You must make it absolutely clear that
+ any terms which differ from this License are offered by
+ You alone, not by the Initial Developer or Contributor.
+ You hereby agree to indemnify the Initial Developer and
+ every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of any
+ such terms You offer.
+ </p>
+ </li>
+ <li>
+ <p><b>3.6. Larger Works.</b></p>
+ <p>
+ You may create a Larger Work by combining Covered
+ Software with other code not governed by the terms of this
+ License and distribute the Larger Work as a single
+ product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered
+ Software.
+ </p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><b>4. Versions of the License.</b></p>
+ <ul>
+ <li>
+ <p><b>4.1. New Versions.</b></p>
+ <p>
+ Sun Microsystems, Inc. is the initial license steward
+ and may publish revised and/or new versions of this
+ License from time to time. Each version will be given a
+ distinguishing version number. Except as provided in
+ Section 4.3, no one other than the license steward has the
+ right to modify this License.
+ </p>
+ </li>
+ <li>
+ <p><b>4.2. Effect of New Versions.</b></p>
+ <p>
+ You may always continue to use, distribute or otherwise
+ make the Covered Software available under the terms of the
+ version of the License under which You originally received
+ the Covered Software. If the Initial Developer includes a
+ notice in the Original Software prohibiting it from being
+ distributed or otherwise made available under any
+ subsequent version of the License, You must distribute and
+ make the Covered Software available under the terms of the
+ version of the License under which You originally received
+ the Covered Software. Otherwise, You may also choose to
+ use, distribute or otherwise make the Covered Software
+ available under the terms of any subsequent version of the
+ License published by the license steward.
+ </p>
+ </li>
+ <li>
+ <p><b>4.3. Modified Versions.</b></p>
+ <p>
+ When You are an Initial Developer and You want to
+ create a new license for Your Original Software, You may
+ create and use a modified version of this License if You:
+ (a)&nbsp;rename the license and remove any references to
+ the name of the license steward (except to note that the
+ license differs from this License); and (b)&nbsp;otherwise
+ make it clear that the license contains terms which differ
+ from this License.
+ </p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><b>5. DISCLAIMER OF WARRANTY.</b></p>
+ <p>
+ COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN
+ &ldquo;AS IS&rdquo; BASIS, WITHOUT WARRANTY OF ANY KIND,
+ EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION,
+ WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS,
+ MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+ COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE
+ PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER
+ OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+ SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
+ CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY
+ COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+ DISCLAIMER.
+ </p>
+ </li>
+
+ <li>
+ <p><b>6. TERMINATION.</b></p>
+ <ul>
+ <li>
+ <p>
+ <b>6.1.</b> This License and the rights granted
+ hereunder will terminate automatically if You fail to comply
+ with terms herein and fail to cure such breach within 30
+ days of becoming aware of the breach. Provisions which, by
+ their nature, must remain in effect beyond the termination
+ of this License shall survive.
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>6.2.</b> If You assert a patent infringement claim
+ (excluding declaratory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You assert such claim is referred to as &ldquo;Participant&rdquo;)
+ alleging that the Participant Software (meaning the Contributor
+ Version where the Participant is a Contributor or the Original Software
+ where the Participant is the Initial Developer) directly or indirectly
+ infringes any patent, then any and all rights granted directly or
+ indirectly to You by such Participant, the Initial Developer (if the
+ Initial Developer is not the Participant) and all Contributors under
+ Sections&nbsp;2.1 and/or 2.2 of this License shall, upon 60 days notice
+ from Participant terminate prospectively and automatically at the
+ expiration of such 60 day notice period, unless if within such 60 day
+ period You withdraw Your claim with respect to the Participant Software
+ against such Participant either unilaterally or pursuant to a written
+ agreement with Participant.
+ </p>
+ </li>
+ <li>
+ <p>
+ <b>6.3.</b> In the event of termination under
+ Sections&nbsp;6.1 or 6.2 above, all end user licenses
+ that have been validly granted by You or any distributor
+ hereunder prior to termination (excluding licenses granted
+ to You by any distributor) shall survive termination.
+ </p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><b>7. LIMITATION OF LIABILITY.</b></p>
+ <p>
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER
+ TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL
+ YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY
+ DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF
+ SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT,
+ SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+ INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL
+ OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL
+ HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS
+ LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH
+ OR PERSONAL INJURY RESULTING FROM SUCH PARTY&rsquo;S
+ NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
+ LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
+ LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
+ EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+ </p>
+ </li>
+
+ <li>
+ <p><b>8. U.S. GOVERNMENT END USERS.</b></p>
+ <p>
+ The Covered Software is a &ldquo;commercial item,&rdquo; as
+ that term is defined in 48&nbsp;C.F.R.&nbsp;2.101 (Oct. 1995),
+ consisting of &ldquo;commercial computer software&rdquo; (as
+ that term is defined at 48
+ C.F.R. &sect;&nbsp;252.227-7014(a)(1)) and &ldquo;commercial
+ computer software documentation&rdquo; as such terms are used
+ in 48&nbsp;C.F.R.&nbsp;12.212 (Sept. 1995). Consistent with
+ 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4
+ (June 1995), all U.S. Government End Users acquire Covered
+ Software with only those rights set forth herein. This
+ U.S. Government Rights clause is in lieu of, and supersedes,
+ any other FAR, DFAR, or other clause or provision that
+ addresses Government rights in computer software under this
+ License.
+ </p>
+ </li>
+
+ <li>
+ <p><b>9. MISCELLANEOUS.</b></p>
+ <p>
+ This License represents the complete agreement concerning
+ subject matter hereof. If any provision of this License is
+ held to be unenforceable, such provision shall be reformed
+ only to the extent necessary to make it enforceable. This
+ License shall be governed by the law of the jurisdiction
+ specified in a notice contained within the Original Software
+ (except to the extent applicable law, if any, provides
+ otherwise), excluding such jurisdiction&rsquo;s
+ conflict-of-law provisions. Any litigation relating to this
+ License shall be subject to the jurisdiction of the courts
+ located in the jurisdiction and venue specified in a notice
+ contained within the Original Software, with the losing party
+ responsible for costs, including, without limitation, court
+ costs and reasonable attorneys&rsquo; fees and expenses. The
+ application of the United Nations Convention on Contracts for
+ the International Sale of Goods is expressly excluded. Any
+ law or regulation which provides that the language of a
+ contract shall be construed against the drafter shall not
+ apply to this License. You agree that You alone are
+ responsible for compliance with the United States export
+ administration regulations (and the export control laws and
+ regulation of any other countries) when You use, distribute or
+ otherwise make available any Covered Software.
+ </p>
+ </li>
+
+ <li>
+ <p><b>10. RESPONSIBILITY FOR CLAIMS.</b></p>
+ <p>
+ As between Initial Developer and the Contributors, each
+ party is responsible for claims and damages arising, directly
+ or indirectly, out of its utilization of rights under this
+ License and You agree to work with Initial Developer and
+ Contributors to distribute such responsibility on an equitable
+ basis. Nothing herein is intended or shall be deemed to
+ constitute any admission of liability.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ <b>
+ NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT
+ AND DISTRIBUTION LICENSE (CDDL)
+ </b>
+ </p>
+ <p>
+ The code released under the CDDL shall be governed by the laws
+ of the State of California (excluding conflict-of-law provisions).
+ Any litigation relating to this License shall be subject to the
+ jurisdiction of the Federal Courts of the Northern District of
+ California and the state courts of the State of California, with
+ venue lying in Santa Clara County, California.
+ </p>
+ </li>
+ </ul>
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..195c86a056
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.net4j.jms.api
+Bundle-Version: 3.1.0.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Export-Package: javax.jms;version="1.1.0"
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/about.html
new file mode 100644
index 0000000000..436438fc9b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/about.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).
+Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor&rsquo;s license
+that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for
+terms and conditions of use.</p>
+<em>
+
+<h4>Java Message Service (JMS) 1.1</h4>
+<p>Your use of the JMS code is subject to the terms and
+conditions of the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0. A copy of the license is
+contained in the file <a href="CDDL.html">CDDL.html</a>
+and is also available at <a href="http://glassfish.dev.java.net/public/CDDL+GPL.html">https://glassfish.dev.java.net/public/CDDL+GPL.html</a>.</p>
+
+<p>The source for the <a href="lib/jms.jar">jms.jar</a> is available on the Glassfish
+website at <a href="https://glassfish.dev.java.net/downloads/v2-b58g.html">https://glassfish.dev.java.net/downloads/v2-b58g.html</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/build.properties
new file mode 100644
index 0000000000..9a57a754c7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = META-INF/,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties,\
+ .,\
+ CDDL.html
+src.includes = about.html,\
+ copyright.txt
+jars.compile.order = .
+source.. = src/
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/plugin.properties
new file mode 100644
index 0000000000..fe3c03a711
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j JMS Provider Spec API
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/BytesMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/BytesMessage.java
new file mode 100644
index 0000000000..669d1b3891
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/BytesMessage.java
@@ -0,0 +1,577 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/** A <CODE>BytesMessage</CODE> object is used to send a message containing a
+ * stream of uninterpreted bytes. It inherits from the <CODE>Message</CODE>
+ * interface and adds a bytes
+ * message body. The receiver of the message supplies the interpretation
+ * of the bytes.
+ *
+ * <P>The <CODE>BytesMessage</CODE> methods are based largely on those found in
+ * <CODE>java.io.DataInputStream</CODE> and
+ * <CODE>java.io.DataOutputStream</CODE>.
+ *
+ * <P>This message type is for client encoding of existing message formats.
+ * If possible, one of the other self-defining message types should be used
+ * instead.
+ *
+ * <P>Although the JMS API allows the use of message properties with byte
+ * messages, they are typically not used, since the inclusion of properties
+ * may affect the format.
+ *
+ * <P>The primitive types can be written explicitly using methods
+ * for each type. They may also be written generically as objects.
+ * For instance, a call to <CODE>BytesMessage.writeInt(6)</CODE> is
+ * equivalent to <CODE>BytesMessage.writeObject(new Integer(6))</CODE>.
+ * Both forms are provided, because the explicit form is convenient for
+ * static programming, and the object form is needed when types are not known
+ * at compile time.
+ *
+ * <P>When the message is first created, and when <CODE>clearBody</CODE>
+ * is called, the body of the message is in write-only mode. After the
+ * first call to <CODE>reset</CODE> has been made, the message body is in
+ * read-only mode.
+ * After a message has been sent, the client that sent it can retain and
+ * modify it without affecting the message that has been sent. The same message
+ * object can be sent multiple times.
+ * When a message has been received, the provider has called
+ * <CODE>reset</CODE> so that the message body is in read-only mode for the client.
+ *
+ * <P>If <CODE>clearBody</CODE> is called on a message in read-only mode,
+ * the message body is cleared and the message is in write-only mode.
+ *
+ * <P>If a client attempts to read a message in write-only mode, a
+ * <CODE>MessageNotReadableException</CODE> is thrown.
+ *
+ * <P>If a client attempts to write a message in read-only mode, a
+ * <CODE>MessageNotWriteableException</CODE> is thrown.
+ *
+ * @version 1.1 April 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session#createBytesMessage()
+ * @see javax.jms.MapMessage
+ * @see javax.jms.Message
+ * @see javax.jms.ObjectMessage
+ * @see javax.jms.StreamMessage
+ * @see javax.jms.TextMessage
+ */
+
+public interface BytesMessage extends Message {
+
+ /** Gets the number of bytes of the message body when the message
+ * is in read-only mode. The value returned can be used to allocate
+ * a byte array. The value returned is the entire length of the message
+ * body, regardless of where the pointer for reading the message
+ * is currently located.
+ *
+ * @return number of bytes in the message
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ * @since 1.1
+ */
+
+ long getBodyLength() throws JMSException;
+
+ /** Reads a <code>boolean</code> from the bytes message stream.
+ *
+ * @return the <code>boolean</code> value read
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+
+ boolean
+ readBoolean() throws JMSException;
+
+
+ /** Reads a signed 8-bit value from the bytes message stream.
+ *
+ * @return the next byte from the bytes message stream as a signed 8-bit
+ * <code>byte</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ byte
+ readByte() throws JMSException;
+
+
+ /** Reads an unsigned 8-bit number from the bytes message stream.
+ *
+ * @return the next byte from the bytes message stream, interpreted as an
+ * unsigned 8-bit number
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ int
+ readUnsignedByte() throws JMSException;
+
+
+ /** Reads a signed 16-bit number from the bytes message stream.
+ *
+ * @return the next two bytes from the bytes message stream, interpreted as
+ * a signed 16-bit number
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ short
+ readShort() throws JMSException;
+
+
+ /** Reads an unsigned 16-bit number from the bytes message stream.
+ *
+ * @return the next two bytes from the bytes message stream, interpreted as
+ * an unsigned 16-bit integer
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ int
+ readUnsignedShort() throws JMSException;
+
+
+ /** Reads a Unicode character value from the bytes message stream.
+ *
+ * @return the next two bytes from the bytes message stream as a Unicode
+ * character
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ char
+ readChar() throws JMSException;
+
+
+ /** Reads a signed 32-bit integer from the bytes message stream.
+ *
+ * @return the next four bytes from the bytes message stream, interpreted
+ * as an <code>int</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ int
+ readInt() throws JMSException;
+
+
+ /** Reads a signed 64-bit integer from the bytes message stream.
+ *
+ * @return the next eight bytes from the bytes message stream, interpreted
+ * as a <code>long</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ long
+ readLong() throws JMSException;
+
+
+ /** Reads a <code>float</code> from the bytes message stream.
+ *
+ * @return the next four bytes from the bytes message stream, interpreted
+ * as a <code>float</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ float
+ readFloat() throws JMSException;
+
+
+ /** Reads a <code>double</code> from the bytes message stream.
+ *
+ * @return the next eight bytes from the bytes message stream, interpreted
+ * as a <code>double</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ double
+ readDouble() throws JMSException;
+
+
+ /** Reads a string that has been encoded using a modified UTF-8
+ * format from the bytes message stream.
+ *
+ * <P>For more information on the UTF-8 format, see "File System Safe
+ * UCS Transformation Format (FSS_UTF)", X/Open Preliminary Specification,
+ * X/Open Company Ltd., Document Number: P316. This information also
+ * appears in ISO/IEC 10646, Annex P.
+ *
+ * @return a Unicode string from the bytes message stream
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of bytes stream has
+ * been reached.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ String
+ readUTF() throws JMSException;
+
+
+ /** Reads a byte array from the bytes message stream.
+ *
+ * <P>If the length of array <code>value</code> is less than the number of
+ * bytes remaining to be read from the stream, the array should
+ * be filled. A subsequent call reads the next increment, and so on.
+ *
+ * <P>If the number of bytes remaining in the stream is less than the
+ * length of
+ * array <code>value</code>, the bytes should be read into the array.
+ * The return value of the total number of bytes read will be less than
+ * the length of the array, indicating that there are no more bytes left
+ * to be read from the stream. The next read of the stream returns -1.
+ *
+ * @param value the buffer into which the data is read
+ *
+ * @return the total number of bytes read into the buffer, or -1 if
+ * there is no more data because the end of the stream has been reached
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ int
+ readBytes(byte[] value) throws JMSException;
+
+
+ /** Reads a portion of the bytes message stream.
+ *
+ * <P>If the length of array <code>value</code> is less than the number of
+ * bytes remaining to be read from the stream, the array should
+ * be filled. A subsequent call reads the next increment, and so on.
+ *
+ * <P>If the number of bytes remaining in the stream is less than the
+ * length of
+ * array <code>value</code>, the bytes should be read into the array.
+ * The return value of the total number of bytes read will be less than
+ * the length of the array, indicating that there are no more bytes left
+ * to be read from the stream. The next read of the stream returns -1.
+ *
+ * <p> If <code>length</code> is negative, or
+ * <code>length</code> is greater than the length of the array
+ * <code>value</code>, then an <code>IndexOutOfBoundsException</code> is
+ * thrown. No bytes will be read from the stream for this exception case.
+ *
+ * @param value the buffer into which the data is read
+ * @param length the number of bytes to read; must be less than or equal to
+ * <code>value.length</code>
+ *
+ * @return the total number of bytes read into the buffer, or -1 if
+ * there is no more data because the end of the stream has been reached
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ int
+ readBytes(byte[] value, int length)
+ throws JMSException;
+
+
+ /** Writes a <code>boolean</code> to the bytes message stream as a 1-byte
+ * value.
+ * The value <code>true</code> is written as the value
+ * <code>(byte)1</code>; the value <code>false</code> is written as
+ * the value <code>(byte)0</code>.
+ *
+ * @param value the <code>boolean</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeBoolean(boolean value)
+ throws JMSException;
+
+
+ /** Writes a <code>byte</code> to the bytes message stream as a 1-byte
+ * value.
+ *
+ * @param value the <code>byte</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeByte(byte value) throws JMSException;
+
+
+ /** Writes a <code>short</code> to the bytes message stream as two bytes,
+ * high byte first.
+ *
+ * @param value the <code>short</code> to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeShort(short value) throws JMSException;
+
+
+ /** Writes a <code>char</code> to the bytes message stream as a 2-byte
+ * value, high byte first.
+ *
+ * @param value the <code>char</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeChar(char value) throws JMSException;
+
+
+ /** Writes an <code>int</code> to the bytes message stream as four bytes,
+ * high byte first.
+ *
+ * @param value the <code>int</code> to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeInt(int value) throws JMSException;
+
+
+ /** Writes a <code>long</code> to the bytes message stream as eight bytes,
+ * high byte first.
+ *
+ * @param value the <code>long</code> to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeLong(long value) throws JMSException;
+
+
+ /** Converts the <code>float</code> argument to an <code>int</code> using
+ * the
+ * <code>floatToIntBits</code> method in class <code>Float</code>,
+ * and then writes that <code>int</code> value to the bytes message
+ * stream as a 4-byte quantity, high byte first.
+ *
+ * @param value the <code>float</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeFloat(float value) throws JMSException;
+
+
+ /** Converts the <code>double</code> argument to a <code>long</code> using
+ * the
+ * <code>doubleToLongBits</code> method in class <code>Double</code>,
+ * and then writes that <code>long</code> value to the bytes message
+ * stream as an 8-byte quantity, high byte first.
+ *
+ * @param value the <code>double</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeDouble(double value) throws JMSException;
+
+
+ /** Writes a string to the bytes message stream using UTF-8 encoding in a
+ * machine-independent manner.
+ *
+ * <P>For more information on the UTF-8 format, see "File System Safe
+ * UCS Transformation Format (FSS_UTF)", X/Open Preliminary Specification,
+ * X/Open Company Ltd., Document Number: P316. This information also
+ * appears in ISO/IEC 10646, Annex P.
+ *
+ * @param value the <code>String</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeUTF(String value) throws JMSException;
+
+
+ /** Writes a byte array to the bytes message stream.
+ *
+ * @param value the byte array to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeBytes(byte[] value) throws JMSException;
+
+
+ /** Writes a portion of a byte array to the bytes message stream.
+ *
+ * @param value the byte array value to be written
+ * @param offset the initial offset within the byte array
+ * @param length the number of bytes to use
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeBytes(byte[] value, int offset, int length)
+ throws JMSException;
+
+
+ /** Writes an object to the bytes message stream.
+ *
+ * <P>This method works only for the objectified primitive
+ * object types (<code>Integer</code>, <code>Double</code>,
+ * <code>Long</code>&nbsp;...), <code>String</code> objects, and byte
+ * arrays.
+ *
+ * @param value the object in the Java programming language ("Java
+ * object") to be written; it must not be null
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageFormatException if the object is of an invalid type.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ * @exception java.lang.NullPointerException if the parameter
+ * <code>value</code> is null.
+ */
+
+ void
+ writeObject(Object value) throws JMSException;
+
+
+ /** Puts the message body in read-only mode and repositions the stream of
+ * bytes to the beginning.
+ *
+ * @exception JMSException if the JMS provider fails to reset the message
+ * due to some internal error.
+ * @exception MessageFormatException if the message has an invalid
+ * format.
+ */
+
+ void
+ reset() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Connection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Connection.java
new file mode 100644
index 0000000000..93e1361bd0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Connection.java
@@ -0,0 +1,414 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** A <CODE>Connection</CODE> object is a client's active connection to its JMS
+ * provider. It typically allocates provider resources outside the Java virtual
+ * machine (JVM).
+ *
+ * <P>Connections support concurrent use.
+ *
+ * <P>A connection serves several purposes:
+ *
+ * <UL>
+ * <LI>It encapsulates an open connection with a JMS provider. It
+ * typically represents an open TCP/IP socket between a client and
+ * the service provider software.
+ * <LI>Its creation is where client authentication takes place.
+ * <LI>It can specify a unique client identifier.
+ * <LI>It provides a <CODE>ConnectionMetaData</CODE> object.
+ * <LI>It supports an optional <CODE>ExceptionListener</CODE> object.
+ * </UL>
+ *
+ * <P>Because the creation of a connection involves setting up authentication
+ * and communication, a connection is a relatively heavyweight
+ * object. Most clients will do all their messaging with a single connection.
+ * Other more advanced applications may use several connections. The JMS API
+ * does
+ * not architect a reason for using multiple connections; however, there may
+ * be operational reasons for doing so.
+ *
+ * <P>A JMS client typically creates a connection, one or more sessions,
+ * and a number of message producers and consumers. When a connection is
+ * created, it is in stopped mode. That means that no messages are being
+ * delivered.
+ *
+ * <P>It is typical to leave the connection in stopped mode until setup
+ * is complete (that is, until all message consumers have been
+ * created). At that point, the client calls
+ * the connection's <CODE>start</CODE> method, and messages begin arriving at
+ * the connection's consumers. This setup
+ * convention minimizes any client confusion that may result from
+ * asynchronous message delivery while the client is still in the process
+ * of setting itself up.
+ *
+ * <P>A connection can be started immediately, and the setup can be done
+ * afterwards. Clients that do this must be prepared to handle asynchronous
+ * message delivery while they are still in the process of setting up.
+ *
+ * <P>A message producer can send messages while a connection is stopped.
+ *
+ * @version 1.1 - February 1, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.ConnectionFactory
+ * @see javax.jms.QueueConnection
+ * @see javax.jms.TopicConnection
+ */
+
+public interface Connection {
+
+ /** Creates a <CODE>Session</CODE> object.
+ *
+ * @param transacted indicates whether the session is transacted
+ * @param acknowledgeMode indicates whether the consumer or the
+ * client will acknowledge any messages it receives; ignored if the session
+ * is transacted. Legal values are <code>Session.AUTO_ACKNOWLEDGE</code>,
+ * <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+ * <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+ *
+ * @return a newly created session
+ *
+ * @exception JMSException if the <CODE>Connection</CODE> object fails
+ * to create a session due to some internal error or
+ * lack of support for the specific transaction
+ * and acknowledgement mode.
+ * @since 1.1
+ *
+ * @see Session#AUTO_ACKNOWLEDGE
+ * @see Session#CLIENT_ACKNOWLEDGE
+ * @see Session#DUPS_OK_ACKNOWLEDGE
+
+ */
+
+ Session
+ createSession(boolean transacted,
+ int acknowledgeMode) throws JMSException;
+
+
+ /** Gets the client identifier for this connection.
+ *
+ * <P>This value is specific to the JMS provider. It is either preconfigured
+ * by an administrator in a <CODE>ConnectionFactory</CODE> object
+ * or assigned dynamically by the application by calling the
+ * <code>setClientID</code> method.
+ *
+ *
+ * @return the unique client identifier
+ *
+ * @exception JMSException if the JMS provider fails to return
+ * the client ID for this connection due
+ * to some internal error.
+ *
+ **/
+ String
+ getClientID() throws JMSException;
+
+
+ /** Sets the client identifier for this connection.
+ *
+ * <P>The preferred way to assign a JMS client's client identifier is for
+ * it to be configured in a client-specific <CODE>ConnectionFactory</CODE>
+ * object and transparently assigned to the <CODE>Connection</CODE> object
+ * it creates.
+ *
+ * <P>Alternatively, a client can set a connection's client identifier
+ * using a provider-specific value. The facility to set a connection's
+ * client identifier explicitly is not a mechanism for overriding the
+ * identifier that has been administratively configured. It is provided
+ * for the case where no administratively specified identifier exists.
+ * If one does exist, an attempt to change it by setting it must throw an
+ * <CODE>IllegalStateException</CODE>. If a client sets the client identifier
+ * explicitly, it must do so immediately after it creates the connection
+ * and before any other
+ * action on the connection is taken. After this point, setting the
+ * client identifier is a programming error that should throw an
+ * <CODE>IllegalStateException</CODE>.
+ *
+ * <P>The purpose of the client identifier is to associate a connection and
+ * its objects with a state maintained on behalf of the client by a
+ * provider. The only such state identified by the JMS API is that required
+ * to support durable subscriptions.
+ *
+ * <P>If another connection with the same <code>clientID</code> is already running when
+ * this method is called, the JMS provider should detect the duplicate ID and throw
+ * an <CODE>InvalidClientIDException</CODE>.
+ *
+ * @param clientID the unique client identifier
+ *
+ * @exception JMSException if the JMS provider fails to
+ * set the client ID for this connection due
+ * to some internal error.
+ *
+ * @exception InvalidClientIDException if the JMS client specifies an
+ * invalid or duplicate client ID.
+ * @exception IllegalStateException if the JMS client attempts to set
+ * a connection's client ID at the wrong time or
+ * when it has been administratively configured.
+ */
+
+ void
+ setClientID(String clientID) throws JMSException;
+
+
+ /** Gets the metadata for this connection.
+ *
+ * @return the connection metadata
+ *
+ * @exception JMSException if the JMS provider fails to
+ * get the connection metadata for this connection.
+ *
+ * @see javax.jms.ConnectionMetaData
+ */
+
+ ConnectionMetaData
+ getMetaData() throws JMSException;
+
+ /**
+ * Gets the <CODE>ExceptionListener</CODE> object for this connection.
+ * Not every <CODE>Connection</CODE> has an <CODE>ExceptionListener</CODE>
+ * associated with it.
+ *
+ * @return the <CODE>ExceptionListener</CODE> for this connection, or null.
+ * if no <CODE>ExceptionListener</CODE> is associated
+ * with this connection.
+ *
+ * @exception JMSException if the JMS provider fails to
+ * get the <CODE>ExceptionListener</CODE> for this
+ * connection.
+ * @see javax.jms.Connection#setExceptionListener
+ */
+
+ ExceptionListener
+ getExceptionListener() throws JMSException;
+
+
+ /** Sets an exception listener for this connection.
+ *
+ * <P>If a JMS provider detects a serious problem with a connection, it
+ * informs the connection's <CODE>ExceptionListener</CODE>, if one has been
+ * registered. It does this by calling the listener's
+ * <CODE>onException</CODE> method, passing it a <CODE>JMSException</CODE>
+ * object describing the problem.
+ *
+ * <P>An exception listener allows a client to be notified of a problem
+ * asynchronously.
+ * Some connections only consume messages, so they would have no other
+ * way to learn their connection has failed.
+ *
+ * <P>A connection serializes execution of its
+ * <CODE>ExceptionListener</CODE>.
+ *
+ * <P>A JMS provider should attempt to resolve connection problems
+ * itself before it notifies the client of them.
+ *
+ * @param listener the exception listener
+ *
+ * @exception JMSException if the JMS provider fails to
+ * set the exception listener for this connection.
+ *
+ */
+
+ void
+ setExceptionListener(ExceptionListener listener) throws JMSException;
+
+ /** Starts (or restarts) a connection's delivery of incoming messages.
+ * A call to <CODE>start</CODE> on a connection that has already been
+ * started is ignored.
+ *
+ * @exception JMSException if the JMS provider fails to start
+ * message delivery due to some internal error.
+ *
+ * @see javax.jms.Connection#stop
+ */
+
+ void
+ start() throws JMSException;
+
+
+ /** Temporarily stops a connection's delivery of incoming messages.
+ * Delivery can be restarted using the connection's <CODE>start</CODE>
+ * method. When the connection is stopped,
+ * delivery to all the connection's message consumers is inhibited:
+ * synchronous receives block, and messages are not delivered to message
+ * listeners.
+ *
+ * <P>This call blocks until receives and/or message listeners in progress
+ * have completed.
+ *
+ * <P>Stopping a connection has no effect on its ability to send messages.
+ * A call to <CODE>stop</CODE> on a connection that has already been
+ * stopped is ignored.
+ *
+ * <P>A call to <CODE>stop</CODE> must not return until delivery of messages
+ * has paused. This means that a client can rely on the fact that none of
+ * its message listeners will be called and that all threads of control
+ * waiting for <CODE>receive</CODE> calls to return will not return with a
+ * message until the
+ * connection is restarted. The receive timers for a stopped connection
+ * continue to advance, so receives may time out while the connection is
+ * stopped.
+ *
+ * <P>If message listeners are running when <CODE>stop</CODE> is invoked,
+ * the <CODE>stop</CODE> call must
+ * wait until all of them have returned before it may return. While these
+ * message listeners are completing, they must have the full services of the
+ * connection available to them.
+ *
+ * @exception JMSException if the JMS provider fails to stop
+ * message delivery due to some internal error.
+ *
+ * @see javax.jms.Connection#start
+ */
+
+ void
+ stop() throws JMSException;
+
+
+ /** Closes the connection.
+ *
+ * <P>Since a provider typically allocates significant resources outside
+ * the JVM on behalf of a connection, clients should close these resources
+ * when they are not needed. Relying on garbage collection to eventually
+ * reclaim these resources may not be timely enough.
+ *
+ * <P>There is no need to close the sessions, producers, and consumers
+ * of a closed connection.
+ *
+ * <P>Closing a connection causes all temporary destinations to be
+ * deleted.
+ *
+ * <P>When this method is invoked, it should not return until message
+ * processing has been shut down in an orderly fashion. This means that all
+ * message
+ * listeners that may have been running have returned, and that all pending
+ * receives have returned. A close terminates all pending message receives
+ * on the connection's sessions' consumers. The receives may return with a
+ * message or with null, depending on whether there was a message available
+ * at the time of the close. If one or more of the connection's sessions'
+ * message listeners is processing a message at the time when connection
+ * <CODE>close</CODE> is invoked, all the facilities of the connection and
+ * its sessions must remain available to those listeners until they return
+ * control to the JMS provider.
+ *
+ * <P>Closing a connection causes any of its sessions' transactions
+ * in progress to be rolled back. In the case where a session's
+ * work is coordinated by an external transaction manager, a session's
+ * <CODE>commit</CODE> and <CODE>rollback</CODE> methods are
+ * not used and the result of a closed session's work is determined
+ * later by the transaction manager.
+ *
+ * Closing a connection does NOT force an
+ * acknowledgment of client-acknowledged sessions.
+ *
+ * <P>Invoking the <CODE>acknowledge</CODE> method of a received message
+ * from a closed connection's session must throw an
+ * <CODE>IllegalStateException</CODE>. Closing a closed connection must
+ * NOT throw an exception.
+ *
+ * @exception JMSException if the JMS provider fails to close the
+ * connection due to some internal error. For
+ * example, a failure to release resources
+ * or to close a socket connection can cause
+ * this exception to be thrown.
+ *
+ */
+
+ void
+ close() throws JMSException;
+
+ /** Creates a connection consumer for this connection (optional operation).
+ * This is an expert facility not used by regular JMS clients.
+ *
+ * @param destination the destination to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param sessionPool the server session pool to associate with this
+ * connection consumer
+ * @param maxMessages the maximum number of messages that can be
+ * assigned to a server session at one time
+ *
+ * @return the connection consumer
+ *
+ * @exception JMSException if the <CODE>Connection</CODE> object fails
+ * to create a connection consumer due to some
+ * internal error or invalid arguments for
+ * <CODE>sessionPool</CODE> and
+ * <CODE>messageSelector</CODE>.
+ * @exception InvalidDestinationException if an invalid destination is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ *
+ * @since 1.1
+ * @see javax.jms.ConnectionConsumer
+ */
+
+ ConnectionConsumer
+ createConnectionConsumer(Destination destination,
+ String messageSelector,
+ ServerSessionPool sessionPool,
+ int maxMessages)
+ throws JMSException;
+
+
+ /** Create a durable connection consumer for this connection (optional operation).
+ * This is an expert facility not used by regular JMS clients.
+ *
+ * @param topic topic to access
+ * @param subscriptionName durable subscription name
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param sessionPool the server session pool to associate with this
+ * durable connection consumer
+ * @param maxMessages the maximum number of messages that can be
+ * assigned to a server session at one time
+ *
+ * @return the durable connection consumer
+ *
+ * @exception JMSException if the <CODE>Connection</CODE> object fails
+ * to create a connection consumer due to some
+ * internal error or invalid arguments for
+ * <CODE>sessionPool</CODE> and
+ * <CODE>messageSelector</CODE>.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ * @since 1.1
+ * @see javax.jms.ConnectionConsumer
+ */
+
+ ConnectionConsumer
+ createDurableConnectionConsumer(Topic topic,
+ String subscriptionName,
+ String messageSelector,
+ ServerSessionPool sessionPool,
+ int maxMessages)
+ throws JMSException;
+}
+
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionConsumer.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionConsumer.java
new file mode 100644
index 0000000000..d6876fbaac
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionConsumer.java
@@ -0,0 +1,85 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** For application servers, <CODE>Connection</CODE> objects provide a special
+ * facility
+ * for creating a <CODE>ConnectionConsumer</CODE> (optional). The messages it
+ * is to consume are
+ * specified by a <CODE>Destination</CODE> and a message selector. In addition,
+ * a <CODE>ConnectionConsumer</CODE> must be given a
+ * <CODE>ServerSessionPool</CODE> to use for
+ * processing its messages.
+ *
+ * <P>Normally, when traffic is light, a <CODE>ConnectionConsumer</CODE> gets a
+ * <CODE>ServerSession</CODE> from its pool, loads it with a single message, and
+ * starts it. As traffic picks up, messages can back up. If this happens,
+ * a <CODE>ConnectionConsumer</CODE> can load each <CODE>ServerSession</CODE>
+ * with more than one
+ * message. This reduces the thread context switches and minimizes resource
+ * use at the expense of some serialization of message processing.
+ *
+ * @version 1.1 February 8, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.Connection#createConnectionConsumer
+ * @see javax.jms.Connection#createDurableConnectionConsumer
+ * @see javax.jms.QueueConnection#createConnectionConsumer
+ * @see javax.jms.TopicConnection#createConnectionConsumer
+ * @see javax.jms.TopicConnection#createDurableConnectionConsumer
+ */
+
+public interface ConnectionConsumer {
+
+ /** Gets the server session pool associated with this connection consumer.
+ *
+ * @return the server session pool used by this connection consumer
+ *
+ * @exception JMSException if the JMS provider fails to get the server
+ * session pool associated with this consumer due
+ * to some internal error.
+ */
+
+ ServerSessionPool
+ getServerSessionPool() throws JMSException;
+
+
+ /** Closes the connection consumer.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a
+ * connection consumer outside the Java virtual machine, clients should
+ * close these resources when
+ * they are not needed. Relying on garbage collection to eventually
+ * reclaim these resources may not be timely enough.
+ *
+ * @exception JMSException if the JMS provider fails to release resources
+ * on behalf of the connection consumer or fails
+ * to close the connection consumer.
+ */
+
+ void
+ close() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionFactory.java
new file mode 100644
index 0000000000..9916d5c3d6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionFactory.java
@@ -0,0 +1,126 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** A <CODE>ConnectionFactory</CODE> object encapsulates a set of connection
+ * configuration
+ * parameters that has been defined by an administrator. A client uses
+ * it to create a connection with a JMS provider.
+ *
+ * <P>A <CODE>ConnectionFactory</CODE> object is a JMS administered object and
+ * supports concurrent use.
+ *
+ * <P>JMS administered objects are objects containing configuration
+ * information that are created by an administrator and later used by
+ * JMS clients. They make it practical to administer the JMS API in the
+ * enterprise.
+ *
+ * <P>Although the interfaces for administered objects do not explicitly
+ * depend on the Java Naming and Directory Interface (JNDI) API, the JMS API
+ * establishes the convention that JMS clients find administered objects by
+ * looking them up in a JNDI namespace.
+ *
+ * <P>An administrator can place an administered object anywhere in a
+ * namespace. The JMS API does not define a naming policy.
+ *
+ * <P>It is expected that JMS providers will provide the tools an
+ * administrator needs to create and configure administered objects in a
+ * JNDI namespace. JMS provider implementations of administered objects
+ * should be both <CODE>javax.jndi.Referenceable</CODE> and
+ * <CODE>java.io.Serializable</CODE> so that they can be stored in all
+ * JNDI naming contexts. In addition, it is recommended that these
+ * implementations follow the JavaBeans<SUP><FONT SIZE="-2">TM</FONT></SUP>
+ * design patterns.
+ *
+ * <P>This strategy provides several benefits:
+ *
+ * <UL>
+ * <LI>It hides provider-specific details from JMS clients.
+ * <LI>It abstracts administrative information into objects in the Java
+ * programming language ("Java objects")
+ * that are easily organized and administered from a common
+ * management console.
+ * <LI>Since there will be JNDI providers for all popular naming
+ * services, this means that JMS providers can deliver one implementation
+ * of administered objects that will run everywhere.
+ * </UL>
+ *
+ * <P>An administered object should not hold on to any remote resources.
+ * Its lookup should not use remote resources other than those used by the
+ * JNDI API itself.
+ *
+ * <P>Clients should think of administered objects as local Java objects.
+ * Looking them up should not have any hidden side effects or use surprising
+ * amounts of local resources.
+ *
+ * @version 1.1 - February 1, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Connection
+ * @see javax.jms.QueueConnectionFactory
+ * @see javax.jms.TopicConnectionFactory
+ */
+
+public interface ConnectionFactory {
+ /** Creates a connection with the default user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @return a newly created connection
+ *
+ * @exception JMSException if the JMS provider fails to create the
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ * @since 1.1
+ */
+
+ Connection
+ createConnection() throws JMSException;
+
+
+ /** Creates a connection with the specified user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @param userName the caller's user name
+ * @param password the caller's password
+ *
+ * @return a newly created connection
+ *
+ * @exception JMSException if the JMS provider fails to create the
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ * @since 1.1
+ */
+
+ Connection
+ createConnection(String userName, String password)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionMetaData.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionMetaData.java
new file mode 100644
index 0000000000..8fb3d50964
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ConnectionMetaData.java
@@ -0,0 +1,133 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+import java.util.Enumeration;
+
+/** A <CODE>ConnectionMetaData</CODE> object provides information describing the
+ * <CODE>Connection</CODE> object.
+ *
+ * @version 1.0 - 13 March 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ */
+
+public interface ConnectionMetaData {
+
+ /** Gets the JMS API version.
+ *
+ * @return the JMS API version
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ String
+ getJMSVersion() throws JMSException;
+
+
+ /** Gets the JMS major version number.
+ *
+ * @return the JMS API major version number
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ int
+ getJMSMajorVersion() throws JMSException;
+
+
+ /** Gets the JMS minor version number.
+ *
+ * @return the JMS API minor version number
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ int
+ getJMSMinorVersion() throws JMSException;
+
+
+ /** Gets the JMS provider name.
+ *
+ * @return the JMS provider name
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ String
+ getJMSProviderName() throws JMSException;
+
+
+ /** Gets the JMS provider version.
+ *
+ * @return the JMS provider version
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ String
+ getProviderVersion() throws JMSException;
+
+
+ /** Gets the JMS provider major version number.
+ *
+ * @return the JMS provider major version number
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ int
+ getProviderMajorVersion() throws JMSException;
+
+
+ /** Gets the JMS provider minor version number.
+ *
+ * @return the JMS provider minor version number
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ int
+ getProviderMinorVersion() throws JMSException;
+
+
+ /** Gets an enumeration of the JMSX property names.
+ *
+ * @return an Enumeration of JMSX property names
+ *
+ * @exception JMSException if the JMS provider fails to retrieve the
+ * metadata due to some internal error.
+ */
+
+ Enumeration
+ getJMSXPropertyNames() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/DeliveryMode.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/DeliveryMode.java
new file mode 100644
index 0000000000..b5cab804c1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/DeliveryMode.java
@@ -0,0 +1,79 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** The delivery modes supported by the JMS API are <CODE>PERSISTENT</CODE> and
+ * <CODE>NON_PERSISTENT</CODE>.
+ *
+ * <P>A client marks a message as persistent if it feels that the
+ * application will have problems if the message is lost in transit.
+ * A client marks a message as non-persistent if an occasional
+ * lost message is tolerable. Clients use delivery mode to tell a
+ * JMS provider how to balance message transport reliability with throughput.
+ *
+ * <P>Delivery mode covers only the transport of the message to its
+ * destination. Retention of a message at the destination until
+ * its receipt is acknowledged is not guaranteed by a <CODE>PERSISTENT</CODE>
+ * delivery mode. Clients should assume that message retention
+ * policies are set administratively. Message retention policy
+ * governs the reliability of message delivery from destination
+ * to message consumer. For example, if a client's message storage
+ * space is exhausted, some messages may be dropped in accordance with
+ * a site-specific message retention policy.
+ *
+ * <P>A message is guaranteed to be delivered once and only once
+ * by a JMS provider if the delivery mode of the message is
+ * <CODE>PERSISTENT</CODE>
+ * and if the destination has a sufficient message retention policy.
+ *
+ *
+ *
+ * @version 1.0 - 7 August 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ */
+
+public interface DeliveryMode {
+
+ /** This is the lowest-overhead delivery mode because it does not require
+ * that the message be logged to stable storage. The level of JMS provider
+ * failure that causes a <CODE>NON_PERSISTENT</CODE> message to be lost is
+ * not defined.
+ *
+ * <P>A JMS provider must deliver a <CODE>NON_PERSISTENT</CODE> message
+ * with an
+ * at-most-once guarantee. This means that it may lose the message, but it
+ * must not deliver it twice.
+ */
+
+ static final int NON_PERSISTENT = 1;
+
+ /** This delivery mode instructs the JMS provider to log the message to stable
+ * storage as part of the client's send operation. Only a hard media
+ * failure should cause a <CODE>PERSISTENT</CODE> message to be lost.
+ */
+
+ static final int PERSISTENT = 2;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Destination.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Destination.java
new file mode 100644
index 0000000000..a7bec1ae86
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Destination.java
@@ -0,0 +1,97 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>Destination</CODE> object encapsulates a provider-specific
+ * address.
+ * The JMS API does not define a standard address syntax. Although a standard
+ * address syntax was considered, it was decided that the differences in
+ * address semantics between existing message-oriented middleware (MOM)
+ * products were too wide to bridge with a single syntax.
+ *
+ * <P>Since <CODE>Destination</CODE> is an administered object, it may
+ * contain
+ * provider-specific configuration information in addition to its address.
+ *
+ * <P>The JMS API also supports a client's use of provider-specific address
+ * names.
+ *
+ * <P><CODE>Destination</CODE> objects support concurrent use.
+ *
+ * <P>A <CODE>Destination</CODE> object is a JMS administered object.
+ *
+ * <P>JMS administered objects are objects containing configuration
+ * information that are created by an administrator and later used by
+ * JMS clients. They make it practical to administer the JMS API in the
+ * enterprise.
+ *
+ * <P>Although the interfaces for administered objects do not explicitly
+ * depend on the Java Naming and Directory Interface (JNDI) API, the JMS API
+ * establishes the convention that JMS clients find administered objects by
+ * looking them up in a JNDI namespace.
+ *
+ * <P>An administrator can place an administered object anywhere in a
+ * namespace. The JMS API does not define a naming policy.
+ *
+ * <P>It is expected that JMS providers will provide the tools an
+ * administrator needs to create and configure administered objects in a
+ * JNDI namespace. JMS provider implementations of administered objects
+ * should implement the <CODE>javax.naming.Referenceable</CODE> and
+ * <CODE>java.io.Serializable</CODE> interfaces so that they can be stored in
+ * all JNDI naming contexts. In addition, it is recommended that these
+ * implementations follow the JavaBeans<SUP><FONT SIZE="-2">TM</FONT></SUP>
+ * design patterns.
+ *
+ * <P>This strategy provides several benefits:
+ *
+ * <UL>
+ * <LI>It hides provider-specific details from JMS clients.
+ * <LI>It abstracts JMS administrative information into objects in the Java
+ * programming language ("Java objects")
+ * that are easily organized and administered from a common
+ * management console.
+ * <LI>Since there will be JNDI providers for all popular naming
+ * services, JMS providers can deliver one implementation
+ * of administered objects that will run everywhere.
+ * </UL>
+ *
+ * <P>An administered object should not hold on to any remote resources.
+ * Its lookup should not use remote resources other than those used by the
+ * JNDI API itself.
+ *
+ * <P>Clients should think of administered objects as local Java objects.
+ * Looking them up should not have any hidden side effects or use surprising
+ * amounts of local resources.
+ *
+ * @version 1.0 - 3 August 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.Queue
+ * @see javax.jms.Topic
+ */
+
+public interface Destination {
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ExceptionListener.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ExceptionListener.java
new file mode 100644
index 0000000000..24904bb097
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ExceptionListener.java
@@ -0,0 +1,57 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+
+/** If a JMS provider detects a serious problem with a <CODE>Connection</CODE>
+ * object, it informs the <CODE>Connection</CODE> object's
+ * <CODE>ExceptionListener</CODE>, if one has been registered.
+ * It does this by calling the listener's <CODE>onException</CODE> method,
+ * passing it a <CODE>JMSException</CODE> argument describing the problem.
+ *
+ * <P>An exception listener allows a client to be notified of a problem
+ * asynchronously. Some connections only consume messages, so they would have no
+ * other way to learn that their connection has failed.
+ *
+ * <P>A JMS provider should attempt to resolve connection problems
+ * itself before it notifies the client of them.
+ *
+ * @version 1.0 - 9 March 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.Connection#setExceptionListener(ExceptionListener)
+ */
+
+public interface ExceptionListener {
+
+ /** Notifies user of a JMS exception.
+ *
+ * @param exception the JMS exception
+ */
+
+ void
+ onException(JMSException exception);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/IllegalStateException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/IllegalStateException.java
new file mode 100644
index 0000000000..5c80831a90
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/IllegalStateException.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception is thrown when a method is
+ * invoked at an illegal or inappropriate time or if the provider is
+ * not in an appropriate state for the requested operation. For example,
+ * this exception must be thrown if <CODE>Session.commit</CODE> is
+ * called on a non-transacted session. This exception is also called when
+ * a domain inappropriate method is called, such as calling
+ * <CODE>TopicSession.CreateQueueBrowser</CODE>.
+ *
+ * @version April 9, 2002
+ * @author Rahul Sharma
+ * @author Kate Stout
+ **/
+
+public class IllegalStateException extends JMSException {
+
+ /** Constructs an <CODE>IllegalStateException</CODE> with the specified reason
+ * and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ IllegalStateException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs an <CODE>IllegalStateException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ IllegalStateException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidClientIDException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidClientIDException.java
new file mode 100644
index 0000000000..0c4aae3f7e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidClientIDException.java
@@ -0,0 +1,60 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a
+ * client attempts to set a connection's client ID to a value that
+ * is rejected by a provider.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class InvalidClientIDException extends JMSException {
+
+ /** Constructs an <CODE>InvalidClientIDException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ InvalidClientIDException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs an <CODE>InvalidClientIDException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ InvalidClientIDException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidDestinationException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidDestinationException.java
new file mode 100644
index 0000000000..410b5b1339
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidDestinationException.java
@@ -0,0 +1,61 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a
+ * destination either is not understood by a provider or is no
+ * longer valid.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class InvalidDestinationException extends JMSException {
+
+ /** Constructs an <CODE>InvalidDestinationException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ InvalidDestinationException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs an <CODE>InvalidDestinationException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ InvalidDestinationException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidSelectorException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidSelectorException.java
new file mode 100644
index 0000000000..3f55c62c6d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/InvalidSelectorException.java
@@ -0,0 +1,61 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a
+ * JMS client attempts to give a provider a message selector with
+ * invalid syntax.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class InvalidSelectorException extends JMSException {
+
+ /** Constructs an <CODE>InvalidSelectorException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ InvalidSelectorException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs an <CODE>InvalidSelectorException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ InvalidSelectorException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSException.java
new file mode 100644
index 0000000000..38230dbabf
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSException.java
@@ -0,0 +1,110 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P>This is the root class of all JMS API exceptions.
+ *
+ * <P>It provides the following information:
+ * <UL>
+ * <LI> A provider-specific string describing the error. This string is
+ * the standard exception message and is available via the
+ * <CODE>getMessage</CODE> method.
+ * <LI> A provider-specific string error code
+ * <LI> A reference to another exception. Often a JMS API exception will
+ * be the result of a lower-level problem. If appropriate, this
+ * lower-level exception can be linked to the JMS API exception.
+ * </UL>
+ * @version 1.0 - 5 Oct 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ **/
+
+public class JMSException extends Exception {
+
+ /** Vendor-specific error code.
+ **/
+ private String errorCode;
+
+ /** <CODE>Exception</CODE> reference.
+ **/
+ private Exception linkedException;
+
+
+ /** Constructs a <CODE>JMSException</CODE> with the specified reason and
+ * error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ **/
+ public
+ JMSException(String reason, String errorCode) {
+ super(reason);
+ this.errorCode = errorCode;
+ linkedException = null;
+ }
+
+ /** Constructs a <CODE>JMSException</CODE> with the specified reason and with
+ * the error code defaulting to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ JMSException(String reason) {
+ super(reason);
+ this.errorCode = null;
+ linkedException = null;
+ }
+
+ /** Gets the vendor-specific error code.
+ * @return a string specifying the vendor-specific
+ * error code
+ **/
+ public
+ String getErrorCode() {
+ return this.errorCode;
+ }
+
+ /**
+ * Gets the exception linked to this one.
+ *
+ * @return the linked <CODE>Exception</CODE>, null if none
+ **/
+ public
+ Exception getLinkedException() {
+ return (linkedException);
+ }
+
+ /**
+ * Adds a linked <CODE>Exception</CODE>.
+ *
+ * @param ex the linked <CODE>Exception</CODE>
+ **/
+ public
+ synchronized void setLinkedException(Exception ex) {
+ linkedException = ex;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSSecurityException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSSecurityException.java
new file mode 100644
index 0000000000..61377aca20
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/JMSSecurityException.java
@@ -0,0 +1,61 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a provider rejects a user
+ * name/password submitted by a client. It may also be thrown for any case
+ * where a security restriction prevents a method from completing.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class JMSSecurityException extends JMSException {
+
+ /** Constructs a <CODE>JMSSecurityException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ JMSSecurityException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>JMSSecurityException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ JMSSecurityException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MapMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MapMessage.java
new file mode 100644
index 0000000000..faada144d1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MapMessage.java
@@ -0,0 +1,529 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+import java.util.Enumeration;
+
+/** A <CODE>MapMessage</CODE> object is used to send a set of name-value pairs.
+ * The names are <CODE>String</CODE> objects, and the values are primitive
+ * data types in the Java programming language. The names must have a value that
+ * is not null, and not an empty string. The entries can be accessed
+ * sequentially or randomly by name. The order of the entries is undefined.
+ * <CODE>MapMessage</CODE> inherits from the <CODE>Message</CODE> interface
+ * and adds a message body that contains a Map.
+ *
+ * <P>The primitive types can be read or written explicitly using methods
+ * for each type. They may also be read or written generically as objects.
+ * For instance, a call to <CODE>MapMessage.setInt("foo", 6)</CODE> is
+ * equivalent to <CODE>MapMessage.setObject("foo", new Integer(6))</CODE>.
+ * Both forms are provided, because the explicit form is convenient for
+ * static programming, and the object form is needed when types are not known
+ * at compile time.
+ *
+ * <P>When a client receives a <CODE>MapMessage</CODE>, it is in read-only
+ * mode. If a client attempts to write to the message at this point, a
+ * <CODE>MessageNotWriteableException</CODE> is thrown. If
+ * <CODE>clearBody</CODE> is called, the message can now be both read from and
+ * written to.
+ *
+ * <P><CODE>MapMessage</CODE> objects support the following conversion table.
+ * The marked cases must be supported. The unmarked cases must throw a
+ * <CODE>JMSException</CODE>. The <CODE>String</CODE>-to-primitive conversions
+ * may throw a runtime exception if the primitive's <CODE>valueOf()</CODE>
+ * method does not accept it as a valid <CODE>String</CODE> representation of
+ * the primitive.
+ *
+ * <P>A value written as the row type can be read as the column type.
+ *
+ * <PRE>
+ * | | boolean byte short char int long float double String byte[]
+ * |----------------------------------------------------------------------
+ * |boolean | X X
+ * |byte | X X X X X
+ * |short | X X X X
+ * |char | X X
+ * |int | X X X
+ * |long | X X
+ * |float | X X X
+ * |double | X X
+ * |String | X X X X X X X X
+ * |byte[] | X
+ * |----------------------------------------------------------------------
+ * </PRE>
+ *
+ * <P>Attempting to read a null value as a primitive type must be treated
+ * as calling the primitive's corresponding <code>valueOf(String)</code>
+ * conversion method with a null value. Since <code>char</code> does not
+ * support a <code>String</code> conversion, attempting to read a null value
+ * as a <code>char</code> must throw a <code>NullPointerException</code>.
+ *
+ * @version 1.1 February 2, 002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.Session#createMapMessage()
+ * @see javax.jms.BytesMessage
+ * @see javax.jms.Message
+ * @see javax.jms.ObjectMessage
+ * @see javax.jms.StreamMessage
+ * @see javax.jms.TextMessage
+ */
+
+public interface MapMessage extends Message {
+
+
+ /** Returns the <CODE>boolean</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>boolean</CODE>
+ *
+ * @return the <CODE>boolean</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ boolean
+ getBoolean(String name) throws JMSException;
+
+
+ /** Returns the <CODE>byte</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>byte</CODE>
+ *
+ * @return the <CODE>byte</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ byte
+ getByte(String name) throws JMSException;
+
+
+ /** Returns the <CODE>short</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>short</CODE>
+ *
+ * @return the <CODE>short</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ short
+ getShort(String name) throws JMSException;
+
+
+ /** Returns the Unicode character value with the specified name.
+ *
+ * @param name the name of the Unicode character
+ *
+ * @return the Unicode character value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ char
+ getChar(String name) throws JMSException;
+
+
+ /** Returns the <CODE>int</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>int</CODE>
+ *
+ * @return the <CODE>int</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ int
+ getInt(String name) throws JMSException;
+
+
+ /** Returns the <CODE>long</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>long</CODE>
+ *
+ * @return the <CODE>long</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ long
+ getLong(String name) throws JMSException;
+
+
+ /** Returns the <CODE>float</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>float</CODE>
+ *
+ * @return the <CODE>float</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ float
+ getFloat(String name) throws JMSException;
+
+
+ /** Returns the <CODE>double</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>double</CODE>
+ *
+ * @return the <CODE>double</CODE> value with the specified name
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ double
+ getDouble(String name) throws JMSException;
+
+
+ /** Returns the <CODE>String</CODE> value with the specified name.
+ *
+ * @param name the name of the <CODE>String</CODE>
+ *
+ * @return the <CODE>String</CODE> value with the specified name; if there
+ * is no item by this name, a null value is returned
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ String
+ getString(String name) throws JMSException;
+
+
+ /** Returns the byte array value with the specified name.
+ *
+ * @param name the name of the byte array
+ *
+ * @return a copy of the byte array value with the specified name; if there
+ * is no
+ * item by this name, a null value is returned.
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ byte[]
+ getBytes(String name) throws JMSException;
+
+
+ /** Returns the value of the object with the specified name.
+ *
+ * <P>This method can be used to return, in objectified format,
+ * an object in the Java programming language ("Java object") that had
+ * been stored in the Map with the equivalent
+ * <CODE>setObject</CODE> method call, or its equivalent primitive
+ * <CODE>set<I>type</I></CODE> method.
+ *
+ * <P>Note that byte values are returned as <CODE>byte[]</CODE>, not
+ * <CODE>Byte[]</CODE>.
+ *
+ * @param name the name of the Java object
+ *
+ * @return a copy of the Java object value with the specified name, in
+ * objectified format (for example, if the object was set as an
+ * <CODE>int</CODE>, an <CODE>Integer</CODE> is returned); if there is no
+ * item by this name, a null value is returned
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ */
+
+ Object
+ getObject(String name) throws JMSException;
+
+
+
+ /** Returns an <CODE>Enumeration</CODE> of all the names in the
+ * <CODE>MapMessage</CODE> object.
+ *
+ * @return an enumeration of all the names in this <CODE>MapMessage</CODE>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ */
+
+ Enumeration
+ getMapNames() throws JMSException;
+
+
+ /** Sets a <CODE>boolean</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>boolean</CODE>
+ * @param value the <CODE>boolean</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setBoolean(String name, boolean value) throws JMSException;
+
+
+ /** Sets a <CODE>byte</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>byte</CODE>
+ * @param value the <CODE>byte</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setByte(String name, byte value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>short</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>short</CODE>
+ * @param value the <CODE>short</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setShort(String name, short value)
+ throws JMSException;
+
+
+ /** Sets a Unicode character value with the specified name into the Map.
+ *
+ * @param name the name of the Unicode character
+ * @param value the Unicode character value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setChar(String name, char value)
+ throws JMSException;
+
+
+ /** Sets an <CODE>int</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>int</CODE>
+ * @param value the <CODE>int</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setInt(String name, int value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>long</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>long</CODE>
+ * @param value the <CODE>long</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setLong(String name, long value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>float</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>float</CODE>
+ * @param value the <CODE>float</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setFloat(String name, float value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>double</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>double</CODE>
+ * @param value the <CODE>double</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setDouble(String name, double value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>String</CODE> value with the specified name into the Map.
+ *
+ * @param name the name of the <CODE>String</CODE>
+ * @param value the <CODE>String</CODE> value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setString(String name, String value)
+ throws JMSException;
+
+
+ /** Sets a byte array value with the specified name into the Map.
+ *
+ * @param name the name of the byte array
+ * @param value the byte array value to set in the Map; the array
+ * is copied so that the value for <CODE>name</CODE> will
+ * not be altered by future modifications
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception NullPointerException if the name is null, or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setBytes(String name, byte[] value)
+ throws JMSException;
+
+
+ /** Sets a portion of the byte array value with the specified name into the
+ * Map.
+ *
+ * @param name the name of the byte array
+ * @param value the byte array value to set in the Map
+ * @param offset the initial offset within the byte array
+ * @param length the number of bytes to use
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setBytes(String name, byte[] value,
+ int offset, int length)
+ throws JMSException;
+
+
+ /** Sets an object value with the specified name into the Map.
+ *
+ * <P>This method works only for the objectified primitive
+ * object types (<code>Integer</code>, <code>Double</code>,
+ * <code>Long</code>&nbsp;...), <code>String</code> objects, and byte
+ * arrays.
+ *
+ * @param name the name of the Java object
+ * @param value the Java object value to set in the Map
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageFormatException if the object is invalid.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setObject(String name, Object value)
+ throws JMSException;
+
+
+ /** Indicates whether an item exists in this <CODE>MapMessage</CODE> object.
+ *
+ * @param name the name of the item to test
+ *
+ * @return true if the item exists
+ *
+ * @exception JMSException if the JMS provider fails to determine if the
+ * item exists due to some internal error.
+ */
+
+ boolean
+ itemExists(String name) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Message.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Message.java
new file mode 100644
index 0000000000..e3148ee859
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Message.java
@@ -0,0 +1,1511 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+import java.util.Enumeration;
+import java.util.Properties;
+
+/** The <CODE>Message</CODE> interface is the root interface of all JMS
+ * messages. It defines the message header and the <CODE>acknowledge</CODE>
+ * method used for all messages.
+ *
+ * <P>Most message-oriented middleware (MOM) products treat messages as
+ * lightweight entities that consist
+ * of a header and a payload. The header contains fields used for message
+ * routing and identification; the payload contains the application data
+ * being sent.
+ *
+ * <P>Within this general form, the definition of a message varies
+ * significantly across products. It would be quite difficult for the JMS API
+ * to support all of these message models.
+ *
+ * <P>With this in mind, the JMS message model has the following goals:
+ * <UL>
+ * <LI>Provide a single, unified message API
+ * <LI>Provide an API suitable for creating messages that match the
+ * format used by provider-native messaging applications
+ * <LI>Support the development of heterogeneous applications that span
+ * operating systems, machine architectures, and computer languages
+ * <LI>Support messages containing objects in the Java programming language
+ * ("Java objects")
+ * <LI>Support messages containing Extensible Markup Language (XML) pages
+ * </UL>
+ *
+ * <P>JMS messages are composed of the following parts:
+ * <UL>
+ * <LI>Header - All messages support the same set of header fields.
+ * Header fields contain values used by both clients and providers to
+ * identify and route messages.
+ * <LI>Properties - Each message contains a built-in facility for supporting
+ * application-defined property values. Properties provide an efficient
+ * mechanism for supporting application-defined message filtering.
+ * <LI>Body - The JMS API defines several types of message body, which cover
+ * the majority of messaging styles currently in use.
+ * </UL>
+ *
+ * <H4>Message Bodies</H4>
+ *
+ * <P>The JMS API defines five types of message body:
+ * <UL>
+ * <LI>Stream - A <CODE>StreamMessage</CODE> object's message body contains
+ * a stream of primitive values in the Java programming
+ * language ("Java primitives"). It is filled and read sequentially.
+ * <LI>Map - A <CODE>MapMessage</CODE> object's message body contains a set
+ * of name-value pairs, where names are <CODE>String</CODE>
+ * objects, and values are Java primitives. The entries can be accessed
+ * sequentially or randomly by name. The order of the entries is
+ * undefined.
+ * <LI>Text - A <CODE>TextMessage</CODE> object's message body contains a
+ * <CODE>java.lang.String</CODE> object. This message type can be used
+ * to transport plain-text messages, and XML messages.
+ * <LI>Object - An <CODE>ObjectMessage</CODE> object's message body contains
+ * a <CODE>Serializable</CODE> Java object.
+ * <LI>Bytes - A <CODE>BytesMessage</CODE> object's message body contains a
+ * stream of uninterpreted bytes. This message type is for
+ * literally encoding a body to match an existing message format. In
+ * many cases, it is possible to use one of the other body types,
+ * which are easier to use. Although the JMS API allows the use of
+ * message properties with byte messages, they are typically not used,
+ * since the inclusion of properties may affect the format.
+ * </UL>
+ *
+ * <H4>Message Headers</H4>
+ *
+ * <P>The <CODE>JMSCorrelationID</CODE> header field is used for linking one
+ * message with
+ * another. It typically links a reply message with its requesting message.
+ *
+ * <P><CODE>JMSCorrelationID</CODE> can hold a provider-specific message ID,
+ * an application-specific <CODE>String</CODE> object, or a provider-native
+ * <CODE>byte[]</CODE> value.
+ *
+ * <H4>Message Properties</H4>
+ *
+ * <P>A <CODE>Message</CODE> object contains a built-in facility for supporting
+ * application-defined property values. In effect, this provides a mechanism
+ * for adding application-specific header fields to a message.
+ *
+ * <P>Properties allow an application, via message selectors, to have a JMS
+ * provider select, or filter, messages on its behalf using
+ * application-specific criteria.
+ *
+ * <P>Property names must obey the rules for a message selector identifier.
+ * Property names must not be null, and must not be empty strings. If a property
+ * name is set and it is either null or an empty string, an
+ * <CODE>IllegalArgumentException</CODE> must be thrown.
+ *
+ * <P>Property values can be <CODE>boolean</CODE>, <CODE>byte</CODE>,
+ * <CODE>short</CODE>, <CODE>int</CODE>, <CODE>long</CODE>, <CODE>float</CODE>,
+ * <CODE>double</CODE>, and <CODE>String</CODE>.
+ *
+ * <P>Property values are set prior to sending a message. When a client
+ * receives a message, its properties are in read-only mode. If a
+ * client attempts to set properties at this point, a
+ * <CODE>MessageNotWriteableException</CODE> is thrown. If
+ * <CODE>clearProperties</CODE> is called, the properties can now be both
+ * read from and written to. Note that header fields are distinct from
+ * properties. Header fields are never in read-only mode.
+ *
+ * <P>A property value may duplicate a value in a message's body, or it may
+ * not. Although JMS does not define a policy for what should or should not
+ * be made a property, application developers should note that JMS providers
+ * will likely handle data in a message's body more efficiently than data in
+ * a message's properties. For best performance, applications should use
+ * message properties only when they need to customize a message's header.
+ * The primary reason for doing this is to support customized message
+ * selection.
+ *
+ * <P>Message properties support the following conversion table. The marked
+ * cases must be supported. The unmarked cases must throw a
+ * <CODE>JMSException</CODE>. The <CODE>String</CODE>-to-primitive conversions
+ * may throw a runtime exception if the
+ * primitive's <CODE>valueOf</CODE> method does not accept the
+ * <CODE>String</CODE> as a valid representation of the primitive.
+ *
+ * <P>A value written as the row type can be read as the column type.
+ *
+ * <PRE>
+ * | | boolean byte short int long float double String
+ * |----------------------------------------------------------
+ * |boolean | X X
+ * |byte | X X X X X
+ * |short | X X X X
+ * |int | X X X
+ * |long | X X
+ * |float | X X X
+ * |double | X X
+ * |String | X X X X X X X X
+ * |----------------------------------------------------------
+ * </PRE>
+ *
+ * <P>In addition to the type-specific set/get methods for properties, JMS
+ * provides the <CODE>setObjectProperty</CODE> and
+ * <CODE>getObjectProperty</CODE> methods. These support the same set of
+ * property types using the objectified primitive values. Their purpose is
+ * to allow the decision of property type to made at execution time rather
+ * than at compile time. They support the same property value conversions.
+ *
+ * <P>The <CODE>setObjectProperty</CODE> method accepts values of class
+ * <CODE>Boolean</CODE>, <CODE>Byte</CODE>, <CODE>Short</CODE>,
+ * <CODE>Integer</CODE>, <CODE>Long</CODE>, <CODE>Float</CODE>,
+ * <CODE>Double</CODE>, and <CODE>String</CODE>. An attempt
+ * to use any other class must throw a <CODE>JMSException</CODE>.
+ *
+ * <P>The <CODE>getObjectProperty</CODE> method only returns values of class
+ * <CODE>Boolean</CODE>, <CODE>Byte</CODE>, <CODE>Short</CODE>,
+ * <CODE>Integer</CODE>, <CODE>Long</CODE>, <CODE>Float</CODE>,
+ * <CODE>Double</CODE>, and <CODE>String</CODE>.
+ *
+ * <P>The order of property values is not defined. To iterate through a
+ * message's property values, use <CODE>getPropertyNames</CODE> to retrieve
+ * a property name enumeration and then use the various property get methods
+ * to retrieve their values.
+ *
+ * <P>A message's properties are deleted by the <CODE>clearProperties</CODE>
+ * method. This leaves the message with an empty set of properties.
+ *
+ * <P>Getting a property value for a name which has not been set returns a
+ * null value. Only the <CODE>getStringProperty</CODE> and
+ * <CODE>getObjectProperty</CODE> methods can return a null value.
+ * Attempting to read a null value as a primitive type must be treated as
+ * calling the primitive's corresponding <CODE>valueOf(String)</CODE>
+ * conversion method with a null value.
+ *
+ * <P>The JMS API reserves the <CODE>JMSX</CODE> property name prefix for JMS
+ * defined properties.
+ * The full set of these properties is defined in the Java Message Service
+ * specification. New JMS defined properties may be added in later versions
+ * of the JMS API. Support for these properties is optional. The
+ * <CODE>String[] ConnectionMetaData.getJMSXPropertyNames</CODE> method
+ * returns the names of the JMSX properties supported by a connection.
+ *
+ * <P>JMSX properties may be referenced in message selectors whether or not
+ * they are supported by a connection. If they are not present in a
+ * message, they are treated like any other absent property.
+ *
+ * <P>JMSX properties defined in the specification as "set by provider on
+ * send" are available to both the producer and the consumers of the message.
+ * JMSX properties defined in the specification as "set by provider on
+ * receive" are available only to the consumers.
+ *
+ * <P><CODE>JMSXGroupID</CODE> and <CODE>JMSXGroupSeq</CODE> are standard
+ * properties that clients
+ * should use if they want to group messages. All providers must support them.
+ * Unless specifically noted, the values and semantics of the JMSX properties
+ * are undefined.
+ *
+ * <P>The JMS API reserves the <CODE>JMS_<I>vendor_name</I></CODE> property
+ * name prefix for provider-specific properties. Each provider defines its own
+ * value for <CODE><I>vendor_name</I></CODE>. This is the mechanism a JMS
+ * provider uses to make its special per-message services available to a JMS
+ * client.
+ *
+ * <P>The purpose of provider-specific properties is to provide special
+ * features needed to integrate JMS clients with provider-native clients in a
+ * single JMS application. They should not be used for messaging between JMS
+ * clients.
+ *
+ * <H4>Provider Implementations of JMS Message Interfaces</H4>
+ *
+ * <P>The JMS API provides a set of message interfaces that define the JMS
+ * message
+ * model. It does not provide implementations of these interfaces.
+ *
+ * <P>Each JMS provider supplies a set of message factories with its
+ * <CODE>Session</CODE> object for creating instances of messages. This allows
+ * a provider to use message implementations tailored to its specific needs.
+ *
+ * <P>A provider must be prepared to accept message implementations that are
+ * not its own. They may not be handled as efficiently as its own
+ * implementation; however, they must be handled.
+ *
+ * <P>Note the following exception case when a provider is handling a foreign
+ * message implementation. If the foreign message implementation contains a
+ * <CODE>JMSReplyTo</CODE> header field that is set to a foreign destination
+ * implementation, the provider is not required to handle or preserve the
+ * value of this header field.
+ *
+ * <H4>Message Selectors</H4>
+ *
+ * <P>A JMS message selector allows a client to specify, by
+ * header field references and property references, the
+ * messages it is interested in. Only messages whose header
+ * and property values
+ * match the
+ * selector are delivered. What it means for a message not to be delivered
+ * depends on the <CODE>MessageConsumer</CODE> being used (see
+ * {@link javax.jms.QueueReceiver QueueReceiver} and
+ * {@link javax.jms.TopicSubscriber TopicSubscriber}).
+ *
+ * <P>Message selectors cannot reference message body values.
+ *
+ * <P>A message selector matches a message if the selector evaluates to
+ * true when the message's header field values and property values are
+ * substituted for their corresponding identifiers in the selector.
+ *
+ * <P>A message selector is a <CODE>String</CODE> whose syntax is based on a
+ * subset of
+ * the SQL92 conditional expression syntax. If the value of a message selector
+ * is an empty string, the value is treated as a null and indicates that there
+ * is no message selector for the message consumer.
+ *
+ * <P>The order of evaluation of a message selector is from left to right
+ * within precedence level. Parentheses can be used to change this order.
+ *
+ * <P>Predefined selector literals and operator names are shown here in
+ * uppercase; however, they are case insensitive.
+ *
+ * <P>A selector can contain:
+ *
+ * <UL>
+ * <LI>Literals:
+ * <UL>
+ * <LI>A string literal is enclosed in single quotes, with a single quote
+ * represented by doubled single quote; for example,
+ * <CODE>'literal'</CODE> and <CODE>'literal''s'</CODE>. Like
+ * string literals in the Java programming language, these use the
+ * Unicode character encoding.
+ * <LI>An exact numeric literal is a numeric value without a decimal
+ * point, such as <CODE>57</CODE>, <CODE>-957</CODE>, and
+ * <CODE>+62</CODE>; numbers in the range of <CODE>long</CODE> are
+ * supported. Exact numeric literals use the integer literal
+ * syntax of the Java programming language.
+ * <LI>An approximate numeric literal is a numeric value in scientific
+ * notation, such as <CODE>7E3</CODE> and <CODE>-57.9E2</CODE>, or a
+ * numeric value with a decimal, such as <CODE>7.</CODE>,
+ * <CODE>-95.7</CODE>, and <CODE>+6.2</CODE>; numbers in the range of
+ * <CODE>double</CODE> are supported. Approximate literals use the
+ * floating-point literal syntax of the Java programming language.
+ * <LI>The boolean literals <CODE>TRUE</CODE> and <CODE>FALSE</CODE>.
+ * </UL>
+ * <LI>Identifiers:
+ * <UL>
+ * <LI>An identifier is an unlimited-length sequence of letters
+ * and digits, the first of which must be a letter. A letter is any
+ * character for which the method <CODE>Character.isJavaLetter</CODE>
+ * returns true. This includes <CODE>'_'</CODE> and <CODE>'$'</CODE>.
+ * A letter or digit is any character for which the method
+ * <CODE>Character.isJavaLetterOrDigit</CODE> returns true.
+ * <LI>Identifiers cannot be the names <CODE>NULL</CODE>,
+ * <CODE>TRUE</CODE>, and <CODE>FALSE</CODE>.
+ * <LI>Identifiers cannot be <CODE>NOT</CODE>, <CODE>AND</CODE>,
+ * <CODE>OR</CODE>, <CODE>BETWEEN</CODE>, <CODE>LIKE</CODE>,
+ * <CODE>IN</CODE>, <CODE>IS</CODE>, or <CODE>ESCAPE</CODE>.
+ * <LI>Identifiers are either header field references or property
+ * references. The type of a property value in a message selector
+ * corresponds to the type used to set the property. If a property
+ * that does not exist in a message is referenced, its value is
+ * <CODE>NULL</CODE>.
+ * <LI>The conversions that apply to the get methods for properties do not
+ * apply when a property is used in a message selector expression.
+ * For example, suppose you set a property as a string value, as in the
+ * following:
+ * <PRE>myMessage.setStringProperty("NumberOfOrders", "2");</PRE>
+ * The following expression in a message selector would evaluate to
+ * false, because a string cannot be used in an arithmetic expression:
+ * <PRE>"NumberOfOrders > 1"</PRE>
+ * <LI>Identifiers are case-sensitive.
+ * <LI>Message header field references are restricted to
+ * <CODE>JMSDeliveryMode</CODE>, <CODE>JMSPriority</CODE>,
+ * <CODE>JMSMessageID</CODE>, <CODE>JMSTimestamp</CODE>,
+ * <CODE>JMSCorrelationID</CODE>, and <CODE>JMSType</CODE>.
+ * <CODE>JMSMessageID</CODE>, <CODE>JMSCorrelationID</CODE>, and
+ * <CODE>JMSType</CODE> values may be null and if so are treated as a
+ * <CODE>NULL</CODE> value.
+ * <LI>Any name beginning with <CODE>'JMSX'</CODE> is a JMS defined
+ * property name.
+ * <LI>Any name beginning with <CODE>'JMS_'</CODE> is a provider-specific
+ * property name.
+ * <LI>Any name that does not begin with <CODE>'JMS'</CODE> is an
+ * application-specific property name.
+ * </UL>
+ * <LI>White space is the same as that defined for the Java programming
+ * language: space, horizontal tab, form feed, and line terminator.
+ * <LI>Expressions:
+ * <UL>
+ * <LI>A selector is a conditional expression; a selector that evaluates
+ * to <CODE>true</CODE> matches; a selector that evaluates to
+ * <CODE>false</CODE> or unknown does not match.
+ * <LI>Arithmetic expressions are composed of themselves, arithmetic
+ * operations, identifiers (whose value is treated as a numeric
+ * literal), and numeric literals.
+ * <LI>Conditional expressions are composed of themselves, comparison
+ * operations, and logical operations.
+ * </UL>
+ * <LI>Standard bracketing <CODE>()</CODE> for ordering expression evaluation
+ * is supported.
+ * <LI>Logical operators in precedence order: <CODE>NOT</CODE>,
+ * <CODE>AND</CODE>, <CODE>OR</CODE>
+ * <LI>Comparison operators: <CODE>=</CODE>, <CODE>></CODE>, <CODE>>=</CODE>,
+ * <CODE><</CODE>, <CODE><=</CODE>, <CODE><></CODE> (not equal)
+ * <UL>
+ * <LI>Only like type values can be compared. One exception is that it
+ * is valid to compare exact numeric values and approximate numeric
+ * values; the type conversion required is defined by the rules of
+ * numeric promotion in the Java programming language. If the
+ * comparison of non-like type values is attempted, the value of the
+ * operation is false. If either of the type values evaluates to
+ * <CODE>NULL</CODE>, the value of the expression is unknown.
+ * <LI>String and boolean comparison is restricted to <CODE>=</CODE> and
+ * <CODE><></CODE>. Two strings are equal
+ * if and only if they contain the same sequence of characters.
+ * </UL>
+ * <LI>Arithmetic operators in precedence order:
+ * <UL>
+ * <LI><CODE>+</CODE>, <CODE>-</CODE> (unary)
+ * <LI><CODE>*</CODE>, <CODE>/</CODE> (multiplication and division)
+ * <LI><CODE>+</CODE>, <CODE>-</CODE> (addition and subtraction)
+ * <LI>Arithmetic operations must use numeric promotion in the Java
+ * programming language.
+ * </UL>
+ * <LI><CODE><I>arithmetic-expr1</I> [NOT] BETWEEN <I>arithmetic-expr2</I>
+ * AND <I>arithmetic-expr3</I></CODE> (comparison operator)
+ * <UL>
+ * <LI><CODE>"age&nbsp;BETWEEN&nbsp;15&nbsp;AND&nbsp;19"</CODE> is
+ * equivalent to
+ * <CODE>"age&nbsp;>=&nbsp;15&nbsp;AND&nbsp;age&nbsp;<=&nbsp;19"</CODE>
+ * <LI><CODE>"age&nbsp;NOT&nbsp;BETWEEN&nbsp;15&nbsp;AND&nbsp;19"</CODE>
+ * is equivalent to
+ * <CODE>"age&nbsp;<&nbsp;15&nbsp;OR&nbsp;age&nbsp;>&nbsp;19"</CODE>
+ * </UL>
+ * <LI><CODE><I>identifier</I> [NOT] IN (<I>string-literal1</I>,
+ * <I>string-literal2</I>,...)</CODE> (comparison operator where
+ * <CODE><I>identifier</I></CODE> has a <CODE>String</CODE> or
+ * <CODE>NULL</CODE> value)
+ * <UL>
+ * <LI><CODE>"Country&nbsp;IN&nbsp;('&nbsp;UK',&nbsp;'US',&nbsp;'France')"</CODE>
+ * is true for
+ * <CODE>'UK'</CODE> and false for <CODE>'Peru'</CODE>; it is
+ * equivalent to the expression
+ * <CODE>"(Country&nbsp;=&nbsp;'&nbsp;UK')&nbsp;OR&nbsp;(Country&nbsp;=&nbsp;'&nbsp;US')&nbsp;OR&nbsp;(Country&nbsp;=&nbsp;'&nbsp;France')"</CODE>
+ * <LI><CODE>"Country&nbsp;NOT&nbsp;IN&nbsp;('&nbsp;UK',&nbsp;'US',&nbsp;'France')"</CODE>
+ * is false for <CODE>'UK'</CODE> and true for <CODE>'Peru'</CODE>; it
+ * is equivalent to the expression
+ * <CODE>"NOT&nbsp;((Country&nbsp;=&nbsp;'&nbsp;UK')&nbsp;OR&nbsp;(Country&nbsp;=&nbsp;'&nbsp;US')&nbsp;OR&nbsp;(Country&nbsp;=&nbsp;'&nbsp;France'))"</CODE>
+ * <LI>If identifier of an <CODE>IN</CODE> or <CODE>NOT IN</CODE>
+ * operation is <CODE>NULL</CODE>, the value of the operation is
+ * unknown.
+ * </UL>
+ * <LI><CODE><I>identifier</I> [NOT] LIKE <I>pattern-value</I> [ESCAPE
+ * <I>escape-character</I>]</CODE> (comparison operator, where
+ * <CODE><I>identifier</I></CODE> has a <CODE>String</CODE> value;
+ * <CODE><I>pattern-value</I></CODE> is a string literal where
+ * <CODE>'_'</CODE> stands for any single character; <CODE>'%'</CODE>
+ * stands for any sequence of characters, including the empty sequence;
+ * and all other characters stand for themselves. The optional
+ * <CODE><I>escape-character</I></CODE> is a single-character string
+ * literal whose character is used to escape the special meaning of the
+ * <CODE>'_'</CODE> and <CODE>'%'</CODE> in
+ * <CODE><I>pattern-value</I></CODE>.)
+ * <UL>
+ * <LI><CODE>"phone&nbsp;LIKE&nbsp;'12%3'"</CODE> is true for
+ * <CODE>'123'</CODE> or <CODE>'12993'</CODE> and false for
+ * <CODE>'1234'</CODE>
+ * <LI><CODE>"word&nbsp;LIKE&nbsp;'l_se'"</CODE> is true for
+ * <CODE>'lose'</CODE> and false for <CODE>'loose'</CODE>
+ * <LI><CODE>"underscored&nbsp;LIKE&nbsp;'\_%'&nbsp;ESCAPE&nbsp;'\'"</CODE>
+ * is true for <CODE>'_foo'</CODE> and false for <CODE>'bar'</CODE>
+ * <LI><CODE>"phone&nbsp;NOT&nbsp;LIKE&nbsp;'12%3'"</CODE> is false for
+ * <CODE>'123'</CODE> or <CODE>'12993'</CODE> and true for
+ * <CODE>'1234'</CODE>
+ * <LI>If <CODE><I>identifier</I></CODE> of a <CODE>LIKE</CODE> or
+ * <CODE>NOT LIKE</CODE> operation is <CODE>NULL</CODE>, the value
+ * of the operation is unknown.
+ * </UL>
+ * <LI><CODE><I>identifier</I> IS NULL</CODE> (comparison operator that tests
+ * for a null header field value or a missing property value)
+ * <UL>
+ * <LI><CODE>"prop_name&nbsp;IS&nbsp;NULL"</CODE>
+ * </UL>
+ * <LI><CODE><I>identifier</I> IS NOT NULL</CODE> (comparison operator that
+ * tests for the existence of a non-null header field value or a property
+ * value)
+ * <UL>
+ * <LI><CODE>"prop_name&nbsp;IS&nbsp;NOT&nbsp;NULL"</CODE>
+ * </UL>
+ *
+ * <P>JMS providers are required to verify the syntactic correctness of a
+ * message selector at the time it is presented. A method that provides a
+ * syntactically incorrect selector must result in a <CODE>JMSException</CODE>.
+ * JMS providers may also optionally provide some semantic checking at the time
+ * the selector is presented. Not all semantic checking can be performed at
+ * the time a message selector is presented, because property types are not known.
+ *
+ * <P>The following message selector selects messages with a message type
+ * of car and color of blue and weight greater than 2500 pounds:
+ *
+ * <PRE>"JMSType&nbsp;=&nbsp;'car'&nbsp;AND&nbsp;color&nbsp;=&nbsp;'blue'&nbsp;AND&nbsp;weight&nbsp;>&nbsp;2500"</PRE>
+ *
+ * <H4>Null Values</H4>
+ *
+ * <P>As noted above, property values may be <CODE>NULL</CODE>. The evaluation
+ * of selector expressions containing <CODE>NULL</CODE> values is defined by
+ * SQL92 <CODE>NULL</CODE> semantics. A brief description of these semantics
+ * is provided here.
+ *
+ * <P>SQL treats a <CODE>NULL</CODE> value as unknown. Comparison or arithmetic
+ * with an unknown value always yields an unknown value.
+ *
+ * <P>The <CODE>IS NULL</CODE> and <CODE>IS NOT NULL</CODE> operators convert
+ * an unknown value into the respective <CODE>TRUE</CODE> and
+ * <CODE>FALSE</CODE> values.
+ *
+ * <P>The boolean operators use three-valued logic as defined by the
+ * following tables:
+ *
+ * <P><B>The definition of the <CODE>AND</CODE> operator</B>
+ *
+ * <PRE>
+ * | AND | T | F | U
+ * +------+-------+-------+-------
+ * | T | T | F | U
+ * | F | F | F | F
+ * | U | U | F | U
+ * +------+-------+-------+-------
+ * </PRE>
+ *
+ * <P><B>The definition of the <CODE>OR</CODE> operator</B>
+ *
+ * <PRE>
+ * | OR | T | F | U
+ * +------+-------+-------+--------
+ * | T | T | T | T
+ * | F | T | F | U
+ * | U | T | U | U
+ * +------+-------+-------+-------
+ * </PRE>
+ *
+ * <P><B>The definition of the <CODE>NOT</CODE> operator</B>
+ *
+ * <PRE>
+ * | NOT
+ * +------+------
+ * | T | F
+ * | F | T
+ * | U | U
+ * +------+-------
+ * </PRE>
+ *
+ * <H4>Special Notes</H4>
+ *
+ * <P>When used in a message selector, the <CODE>JMSDeliveryMode</CODE> header
+ * field is treated as having the values <CODE>'PERSISTENT'</CODE> and
+ * <CODE>'NON_PERSISTENT'</CODE>.
+ *
+ * <P>Date and time values should use the standard <CODE>long</CODE>
+ * millisecond value. When a date or time literal is included in a message
+ * selector, it should be an integer literal for a millisecond value. The
+ * standard way to produce millisecond values is to use
+ * <CODE>java.util.Calendar</CODE>.
+ *
+ * <P>Although SQL supports fixed decimal comparison and arithmetic, JMS
+ * message selectors do not. This is the reason for restricting exact
+ * numeric literals to those without a decimal (and the addition of
+ * numerics with a decimal as an alternate representation for
+ * approximate numeric values).
+ *
+ * <P>SQL comments are not supported.
+ *
+ * @version 1.1 April 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.MessageConsumer#receive()
+ * @see javax.jms.MessageConsumer#receive(long)
+ * @see javax.jms.MessageConsumer#receiveNoWait()
+ * @see javax.jms.MessageListener#onMessage(Message)
+ * @see javax.jms.BytesMessage
+ * @see javax.jms.MapMessage
+ * @see javax.jms.ObjectMessage
+ * @see javax.jms.StreamMessage
+ * @see javax.jms.TextMessage
+ */
+
+public interface Message {
+
+ /** The message producer's default delivery mode is <CODE>PERSISTENT</CODE>.
+ *
+ * @see DeliveryMode#PERSISTENT
+ */
+ static final int DEFAULT_DELIVERY_MODE = DeliveryMode.PERSISTENT;
+
+ /** The message producer's default priority is 4.
+ */
+ static final int DEFAULT_PRIORITY = 4;
+
+ /** The message producer's default time to live is unlimited; the message
+ * never expires.
+ */
+ static final long DEFAULT_TIME_TO_LIVE = 0;
+
+
+ /** Gets the message ID.
+ *
+ * <P>The <CODE>JMSMessageID</CODE> header field contains a value that
+ * uniquely identifies each message sent by a provider.
+ *
+ * <P>When a message is sent, <CODE>JMSMessageID</CODE> can be ignored.
+ * When the <CODE>send</CODE> or <CODE>publish</CODE> method returns, it
+ * contains a provider-assigned value.
+ *
+ * <P>A <CODE>JMSMessageID</CODE> is a <CODE>String</CODE> value that
+ * should function as a
+ * unique key for identifying messages in a historical repository.
+ * The exact scope of uniqueness is provider-defined. It should at
+ * least cover all messages for a specific installation of a
+ * provider, where an installation is some connected set of message
+ * routers.
+ *
+ * <P>All <CODE>JMSMessageID</CODE> values must start with the prefix
+ * <CODE>'ID:'</CODE>.
+ * Uniqueness of message ID values across different providers is
+ * not required.
+ *
+ * <P>Since message IDs take some effort to create and increase a
+ * message's size, some JMS providers may be able to optimize message
+ * overhead if they are given a hint that the message ID is not used by
+ * an application. By calling the
+ * <CODE>MessageProducer.setDisableMessageID</CODE> method, a JMS client
+ * enables this potential optimization for all messages sent by that
+ * message producer. If the JMS provider accepts this
+ * hint, these messages must have the message ID set to null; if the
+ * provider ignores the hint, the message ID must be set to its normal
+ * unique value.
+ *
+ * @return the message ID
+ *
+ * @exception JMSException if the JMS provider fails to get the message ID
+ * due to some internal error.
+ * @see javax.jms.Message#setJMSMessageID(String)
+ * @see javax.jms.MessageProducer#setDisableMessageID(boolean)
+ */
+
+ String
+ getJMSMessageID() throws JMSException;
+
+
+ /** Sets the message ID.
+ *
+ * <P>JMS providers set this field when a message is sent. This method
+ * can be used to change the value for a message that has been received.
+ *
+ * @param id the ID of the message
+ *
+ * @exception JMSException if the JMS provider fails to set the message ID
+ * due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSMessageID()
+ */
+
+ void
+ setJMSMessageID(String id) throws JMSException;
+
+
+ /** Gets the message timestamp.
+ *
+ * <P>The <CODE>JMSTimestamp</CODE> header field contains the time a
+ * message was
+ * handed off to a provider to be sent. It is not the time the
+ * message was actually transmitted, because the actual send may occur
+ * later due to transactions or other client-side queueing of messages.
+ *
+ * <P>When a message is sent, <CODE>JMSTimestamp</CODE> is ignored. When
+ * the <CODE>send</CODE> or <CODE>publish</CODE>
+ * method returns, it contains a time value somewhere in the interval
+ * between the call and the return. The value is in the format of a normal
+ * millis time value in the Java programming language.
+ *
+ * <P>Since timestamps take some effort to create and increase a
+ * message's size, some JMS providers may be able to optimize message
+ * overhead if they are given a hint that the timestamp is not used by an
+ * application. By calling the
+ * <CODE>MessageProducer.setDisableMessageTimestamp</CODE> method, a JMS
+ * client enables this potential optimization for all messages sent by
+ * that message producer. If the JMS provider accepts this
+ * hint, these messages must have the timestamp set to zero; if the
+ * provider ignores the hint, the timestamp must be set to its normal
+ * value.
+ *
+ * @return the message timestamp
+ *
+ * @exception JMSException if the JMS provider fails to get the timestamp
+ * due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSTimestamp(long)
+ * @see javax.jms.MessageProducer#setDisableMessageTimestamp(boolean)
+ */
+
+ long
+ getJMSTimestamp() throws JMSException;
+
+
+ /** Sets the message timestamp.
+ *
+ * <P>JMS providers set this field when a message is sent. This method
+ * can be used to change the value for a message that has been received.
+ *
+ * @param timestamp the timestamp for this message
+ *
+ * @exception JMSException if the JMS provider fails to set the timestamp
+ * due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSTimestamp()
+ */
+
+ void
+ setJMSTimestamp(long timestamp) throws JMSException;
+
+
+ /** Gets the correlation ID as an array of bytes for the message.
+ *
+ * <P>The use of a <CODE>byte[]</CODE> value for
+ * <CODE>JMSCorrelationID</CODE> is non-portable.
+ *
+ * @return the correlation ID of a message as an array of bytes
+ *
+ * @exception JMSException if the JMS provider fails to get the correlation
+ * ID due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSCorrelationID(String)
+ * @see javax.jms.Message#getJMSCorrelationID()
+ * @see javax.jms.Message#setJMSCorrelationIDAsBytes(byte[])
+ */
+
+ byte []
+ getJMSCorrelationIDAsBytes() throws JMSException;
+
+
+ /** Sets the correlation ID as an array of bytes for the message.
+ *
+ * <P>The array is copied before the method returns, so
+ * future modifications to the array will not alter this message header.
+ *
+ * <P>If a provider supports the native concept of correlation ID, a
+ * JMS client may need to assign specific <CODE>JMSCorrelationID</CODE>
+ * values to match those expected by native messaging clients.
+ * JMS providers without native correlation ID values are not required to
+ * support this method and its corresponding get method; their
+ * implementation may throw a
+ * <CODE>java.lang.UnsupportedOperationException</CODE>.
+ *
+ * <P>The use of a <CODE>byte[]</CODE> value for
+ * <CODE>JMSCorrelationID</CODE> is non-portable.
+ *
+ * @param correlationID the correlation ID value as an array of bytes
+ *
+ * @exception JMSException if the JMS provider fails to set the correlation
+ * ID due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSCorrelationID(String)
+ * @see javax.jms.Message#getJMSCorrelationID()
+ * @see javax.jms.Message#getJMSCorrelationIDAsBytes()
+ */
+
+ void
+ setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException;
+
+
+ /** Sets the correlation ID for the message.
+ *
+ * <P>A client can use the <CODE>JMSCorrelationID</CODE> header field to
+ * link one message with another. A typical use is to link a response
+ * message with its request message.
+ *
+ * <P><CODE>JMSCorrelationID</CODE> can hold one of the following:
+ * <UL>
+ * <LI>A provider-specific message ID
+ * <LI>An application-specific <CODE>String</CODE>
+ * <LI>A provider-native <CODE>byte[]</CODE> value
+ * </UL>
+ *
+ * <P>Since each message sent by a JMS provider is assigned a message ID
+ * value, it is convenient to link messages via message ID. All message ID
+ * values must start with the <CODE>'ID:'</CODE> prefix.
+ *
+ * <P>In some cases, an application (made up of several clients) needs to
+ * use an application-specific value for linking messages. For instance,
+ * an application may use <CODE>JMSCorrelationID</CODE> to hold a value
+ * referencing some external information. Application-specified values
+ * must not start with the <CODE>'ID:'</CODE> prefix; this is reserved for
+ * provider-generated message ID values.
+ *
+ * <P>If a provider supports the native concept of correlation ID, a JMS
+ * client may need to assign specific <CODE>JMSCorrelationID</CODE> values
+ * to match those expected by clients that do not use the JMS API. A
+ * <CODE>byte[]</CODE> value is used for this
+ * purpose. JMS providers without native correlation ID values are not
+ * required to support <CODE>byte[]</CODE> values. The use of a
+ * <CODE>byte[]</CODE> value for <CODE>JMSCorrelationID</CODE> is
+ * non-portable.
+ *
+ * @param correlationID the message ID of a message being referred to
+ *
+ * @exception JMSException if the JMS provider fails to set the correlation
+ * ID due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSCorrelationID()
+ * @see javax.jms.Message#getJMSCorrelationIDAsBytes()
+ * @see javax.jms.Message#setJMSCorrelationIDAsBytes(byte[])
+ */
+
+ void
+ setJMSCorrelationID(String correlationID) throws JMSException;
+
+
+ /** Gets the correlation ID for the message.
+ *
+ * <P>This method is used to return correlation ID values that are
+ * either provider-specific message IDs or application-specific
+ * <CODE>String</CODE> values.
+ *
+ * @return the correlation ID of a message as a <CODE>String</CODE>
+ *
+ * @exception JMSException if the JMS provider fails to get the correlation
+ * ID due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSCorrelationID(String)
+ * @see javax.jms.Message#getJMSCorrelationIDAsBytes()
+ * @see javax.jms.Message#setJMSCorrelationIDAsBytes(byte[])
+ */
+
+ String
+ getJMSCorrelationID() throws JMSException;
+
+
+ /** Gets the <CODE>Destination</CODE> object to which a reply to this
+ * message should be sent.
+ *
+ * @return <CODE>Destination</CODE> to which to send a response to this
+ * message
+ *
+ * @exception JMSException if the JMS provider fails to get the
+ * <CODE>JMSReplyTo</CODE> destination due to some
+ * internal error.
+ *
+ * @see javax.jms.Message#setJMSReplyTo(Destination)
+ */
+
+ Destination
+ getJMSReplyTo() throws JMSException;
+
+
+ /** Sets the <CODE>Destination</CODE> object to which a reply to this
+ * message should be sent.
+ *
+ * <P>The <CODE>JMSReplyTo</CODE> header field contains the destination
+ * where a reply
+ * to the current message should be sent. If it is null, no reply is
+ * expected. The destination may be either a <CODE>Queue</CODE> object or
+ * a <CODE>Topic</CODE> object.
+ *
+ * <P>Messages sent with a null <CODE>JMSReplyTo</CODE> value may be a
+ * notification of some event, or they may just be some data the sender
+ * thinks is of interest.
+ *
+ * <P>Messages with a <CODE>JMSReplyTo</CODE> value typically expect a
+ * response. A response is optional; it is up to the client to decide.
+ * These messages are called requests. A message sent in response to a
+ * request is called a reply.
+ *
+ * <P>In some cases a client may wish to match a request it sent earlier
+ * with a reply it has just received. The client can use the
+ * <CODE>JMSCorrelationID</CODE> header field for this purpose.
+ *
+ * @param replyTo <CODE>Destination</CODE> to which to send a response to
+ * this message
+ *
+ * @exception JMSException if the JMS provider fails to set the
+ * <CODE>JMSReplyTo</CODE> destination due to some
+ * internal error.
+ *
+ * @see javax.jms.Message#getJMSReplyTo()
+ */
+
+ void
+ setJMSReplyTo(Destination replyTo) throws JMSException;
+
+
+ /** Gets the <CODE>Destination</CODE> object for this message.
+ *
+ * <P>The <CODE>JMSDestination</CODE> header field contains the
+ * destination to which the message is being sent.
+ *
+ * <P>When a message is sent, this field is ignored. After completion
+ * of the <CODE>send</CODE> or <CODE>publish</CODE> method, the field
+ * holds the destination specified by the method.
+ *
+ * <P>When a message is received, its <CODE>JMSDestination</CODE> value
+ * must be equivalent to the value assigned when it was sent.
+ *
+ * @return the destination of this message
+ *
+ * @exception JMSException if the JMS provider fails to get the destination
+ * due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSDestination(Destination)
+ */
+
+ Destination
+ getJMSDestination() throws JMSException;
+
+
+ /** Sets the <CODE>Destination</CODE> object for this message.
+ *
+ * <P>JMS providers set this field when a message is sent. This method
+ * can be used to change the value for a message that has been received.
+ *
+ * @param destination the destination for this message
+ *
+ * @exception JMSException if the JMS provider fails to set the destination
+ * due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSDestination()
+ */
+
+ void
+ setJMSDestination(Destination destination) throws JMSException;
+
+
+ /** Gets the <CODE>DeliveryMode</CODE> value specified for this message.
+ *
+ * @return the delivery mode for this message
+ *
+ * @exception JMSException if the JMS provider fails to get the
+ * delivery mode due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSDeliveryMode(int)
+ * @see javax.jms.DeliveryMode
+ */
+
+ int
+ getJMSDeliveryMode() throws JMSException;
+
+
+ /** Sets the <CODE>DeliveryMode</CODE> value for this message.
+ *
+ * <P>JMS providers set this field when a message is sent. This method
+ * can be used to change the value for a message that has been received.
+ *
+ * @param deliveryMode the delivery mode for this message
+ *
+ * @exception JMSException if the JMS provider fails to set the
+ * delivery mode due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSDeliveryMode()
+ * @see javax.jms.DeliveryMode
+ */
+
+ void
+ setJMSDeliveryMode(int deliveryMode) throws JMSException;
+
+
+ /** Gets an indication of whether this message is being redelivered.
+ *
+ * <P>If a client receives a message with the <CODE>JMSRedelivered</CODE>
+ * field set,
+ * it is likely, but not guaranteed, that this message was delivered
+ * earlier but that its receipt was not acknowledged
+ * at that time.
+ *
+ * @return true if this message is being redelivered
+ *
+ * @exception JMSException if the JMS provider fails to get the redelivered
+ * state due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSRedelivered(boolean)
+ */
+
+ boolean
+ getJMSRedelivered() throws JMSException;
+
+
+ /** Specifies whether this message is being redelivered.
+ *
+ * <P>This field is set at the time the message is delivered. This
+ * method can be used to change the value for a message that has
+ * been received.
+ *
+ * @param redelivered an indication of whether this message is being
+ * redelivered
+ *
+ * @exception JMSException if the JMS provider fails to set the redelivered
+ * state due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSRedelivered()
+ */
+
+ void
+ setJMSRedelivered(boolean redelivered) throws JMSException;
+
+
+ /** Gets the message type identifier supplied by the client when the
+ * message was sent.
+ *
+ * @return the message type
+ *
+ * @exception JMSException if the JMS provider fails to get the message
+ * type due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSType(String)
+ */
+
+ String
+ getJMSType() throws JMSException;
+
+
+ /** Sets the message type.
+ *
+ * <P>Some JMS providers use a message repository that contains the
+ * definitions of messages sent by applications. The <CODE>JMSType</CODE>
+ * header field may reference a message's definition in the provider's
+ * repository.
+ *
+ * <P>The JMS API does not define a standard message definition repository,
+ * nor does it define a naming policy for the definitions it contains.
+ *
+ * <P>Some messaging systems require that a message type definition for
+ * each application message be created and that each message specify its
+ * type. In order to work with such JMS providers, JMS clients should
+ * assign a value to <CODE>JMSType</CODE>, whether the application makes
+ * use of it or not. This ensures that the field is properly set for those
+ * providers that require it.
+ *
+ * <P>To ensure portability, JMS clients should use symbolic values for
+ * <CODE>JMSType</CODE> that can be configured at installation time to the
+ * values defined in the current provider's message repository. If string
+ * literals are used, they may not be valid type names for some JMS
+ * providers.
+ *
+ * @param type the message type
+ *
+ * @exception JMSException if the JMS provider fails to set the message
+ * type due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSType()
+ */
+
+ void
+ setJMSType(String type) throws JMSException;
+
+
+ /** Gets the message's expiration value.
+ *
+ * <P>When a message is sent, the <CODE>JMSExpiration</CODE> header field
+ * is left unassigned. After completion of the <CODE>send</CODE> or
+ * <CODE>publish</CODE> method, it holds the expiration time of the
+ * message. This is the sum of the time-to-live value specified by the
+ * client and the GMT at the time of the <CODE>send</CODE> or
+ * <CODE>publish</CODE>.
+ *
+ * <P>If the time-to-live is specified as zero, <CODE>JMSExpiration</CODE>
+ * is set to zero to indicate that the message does not expire.
+ *
+ * <P>When a message's expiration time is reached, a provider should
+ * discard it. The JMS API does not define any form of notification of
+ * message expiration.
+ *
+ * <P>Clients should not receive messages that have expired; however,
+ * the JMS API does not guarantee that this will not happen.
+ *
+ * @return the time the message expires, which is the sum of the
+ * time-to-live value specified by the client and the GMT at the
+ * time of the send
+ *
+ * @exception JMSException if the JMS provider fails to get the message
+ * expiration due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSExpiration(long)
+ */
+
+ long
+ getJMSExpiration() throws JMSException;
+
+
+ /** Sets the message's expiration value.
+ *
+ * <P>JMS providers set this field when a message is sent. This method
+ * can be used to change the value for a message that has been received.
+ *
+ * @param expiration the message's expiration time
+ *
+ * @exception JMSException if the JMS provider fails to set the message
+ * expiration due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSExpiration()
+ */
+
+ void
+ setJMSExpiration(long expiration) throws JMSException;
+
+
+ /** Gets the message priority level.
+ *
+ * <P>The JMS API defines ten levels of priority value, with 0 as the
+ * lowest
+ * priority and 9 as the highest. In addition, clients should consider
+ * priorities 0-4 as gradations of normal priority and priorities 5-9
+ * as gradations of expedited priority.
+ *
+ * <P>The JMS API does not require that a provider strictly implement
+ * priority
+ * ordering of messages; however, it should do its best to deliver
+ * expedited messages ahead of normal messages.
+ *
+ * @return the default message priority
+ *
+ * @exception JMSException if the JMS provider fails to get the message
+ * priority due to some internal error.
+ *
+ * @see javax.jms.Message#setJMSPriority(int)
+ */
+
+ int
+ getJMSPriority() throws JMSException;
+
+
+ /** Sets the priority level for this message.
+ *
+ * <P>JMS providers set this field when a message is sent. This method
+ * can be used to change the value for a message that has been received.
+ *
+ * @param priority the priority of this message
+ *
+ * @exception JMSException if the JMS provider fails to set the message
+ * priority due to some internal error.
+ *
+ * @see javax.jms.Message#getJMSPriority()
+ */
+
+ void
+ setJMSPriority(int priority) throws JMSException;
+
+
+ /** Clears a message's properties.
+ *
+ * <P>The message's header fields and body are not cleared.
+ *
+ * @exception JMSException if the JMS provider fails to clear the message
+ * properties due to some internal error.
+ */
+
+ void
+ clearProperties() throws JMSException;
+
+
+ /** Indicates whether a property value exists.
+ *
+ * @param name the name of the property to test
+ *
+ * @return true if the property exists
+ *
+ * @exception JMSException if the JMS provider fails to determine if the
+ * property exists due to some internal error.
+ */
+
+ boolean
+ propertyExists(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>boolean</CODE> property with the
+ * specified name.
+ *
+ * @param name the name of the <CODE>boolean</CODE> property
+ *
+ * @return the <CODE>boolean</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ boolean
+ getBooleanProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>byte</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>byte</CODE> property
+ *
+ * @return the <CODE>byte</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ byte
+ getByteProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>short</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>short</CODE> property
+ *
+ * @return the <CODE>short</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ short
+ getShortProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>int</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>int</CODE> property
+ *
+ * @return the <CODE>int</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ int
+ getIntProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>long</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>long</CODE> property
+ *
+ * @return the <CODE>long</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ long
+ getLongProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>float</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>float</CODE> property
+ *
+ * @return the <CODE>float</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ float
+ getFloatProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>double</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>double</CODE> property
+ *
+ * @return the <CODE>double</CODE> property value for the specified name
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ double
+ getDoubleProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the <CODE>String</CODE> property with the specified
+ * name.
+ *
+ * @param name the name of the <CODE>String</CODE> property
+ *
+ * @return the <CODE>String</CODE> property value for the specified name;
+ * if there is no property by this name, a null value is returned
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ * @exception MessageFormatException if this type conversion is invalid.
+ */
+
+ String
+ getStringProperty(String name) throws JMSException;
+
+
+ /** Returns the value of the Java object property with the specified name.
+ *
+ * <P>This method can be used to return, in objectified format,
+ * an object that has been stored as a property in the message with the
+ * equivalent <CODE>setObjectProperty</CODE> method call, or its equivalent
+ * primitive <CODE>set<I>type</I>Property</CODE> method.
+ *
+ * @param name the name of the Java object property
+ *
+ * @return the Java object property value with the specified name, in
+ * objectified format (for example, if the property was set as an
+ * <CODE>int</CODE>, an <CODE>Integer</CODE> is
+ * returned); if there is no property by this name, a null value
+ * is returned
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * value due to some internal error.
+ */
+
+ Object
+ getObjectProperty(String name) throws JMSException;
+
+
+ /** Returns an <CODE>Enumeration</CODE> of all the property names.
+ *
+ * <P>Note that JMS standard header fields are not considered
+ * properties and are not returned in this enumeration.
+ *
+ * @return an enumeration of all the names of property values
+ *
+ * @exception JMSException if the JMS provider fails to get the property
+ * names due to some internal error.
+ */
+
+ Enumeration
+ getPropertyNames() throws JMSException;
+
+
+ /** Sets a <CODE>boolean</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>boolean</CODE> property
+ * @param value the <CODE>boolean</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setBooleanProperty(String name, boolean value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>byte</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>byte</CODE> property
+ * @param value the <CODE>byte</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setByteProperty(String name, byte value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>short</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>short</CODE> property
+ * @param value the <CODE>short</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setShortProperty(String name, short value)
+ throws JMSException;
+
+
+ /** Sets an <CODE>int</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>int</CODE> property
+ * @param value the <CODE>int</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setIntProperty(String name, int value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>long</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>long</CODE> property
+ * @param value the <CODE>long</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setLongProperty(String name, long value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>float</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>float</CODE> property
+ * @param value the <CODE>float</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setFloatProperty(String name, float value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>double</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>double</CODE> property
+ * @param value the <CODE>double</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setDoubleProperty(String name, double value)
+ throws JMSException;
+
+
+ /** Sets a <CODE>String</CODE> property value with the specified name into
+ * the message.
+ *
+ * @param name the name of the <CODE>String</CODE> property
+ * @param value the <CODE>String</CODE> property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setStringProperty(String name, String value)
+ throws JMSException;
+
+
+ /** Sets a Java object property value with the specified name into the
+ * message.
+ *
+ * <P>Note that this method works only for the objectified primitive
+ * object types (<CODE>Integer</CODE>, <CODE>Double</CODE>,
+ * <CODE>Long</CODE> ...) and <CODE>String</CODE> objects.
+ *
+ * @param name the name of the Java object property
+ * @param value the Java object property value to set
+ *
+ * @exception JMSException if the JMS provider fails to set the property
+ * due to some internal error.
+ * @exception IllegalArgumentException if the name is null or if the name is
+ * an empty string.
+ * @exception MessageFormatException if the object is invalid
+ * @exception MessageNotWriteableException if properties are read-only
+ */
+
+ void
+ setObjectProperty(String name, Object value)
+ throws JMSException;
+
+
+ /** Acknowledges all consumed messages of the session of this consumed
+ * message.
+ *
+ * <P>All consumed JMS messages support the <CODE>acknowledge</CODE>
+ * method for use when a client has specified that its JMS session's
+ * consumed messages are to be explicitly acknowledged. By invoking
+ * <CODE>acknowledge</CODE> on a consumed message, a client acknowledges
+ * all messages consumed by the session that the message was delivered to.
+ *
+ * <P>Calls to <CODE>acknowledge</CODE> are ignored for both transacted
+ * sessions and sessions specified to use implicit acknowledgement modes.
+ *
+ * <P>A client may individually acknowledge each message as it is consumed,
+ * or it may choose to acknowledge messages as an application-defined group
+ * (which is done by calling acknowledge on the last received message of the group,
+ * thereby acknowledging all messages consumed by the session.)
+ *
+ * <P>Messages that have been received but not acknowledged may be
+ * redelivered.
+ *
+ * @exception JMSException if the JMS provider fails to acknowledge the
+ * messages due to some internal error.
+ * @exception IllegalStateException if this method is called on a closed
+ * session.
+ *
+ * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
+ */
+
+ void
+ acknowledge() throws JMSException;
+
+
+ /** Clears out the message body. Clearing a message's body does not clear
+ * its header values or property entries.
+ *
+ * <P>If this message body was read-only, calling this method leaves
+ * the message body in the same state as an empty body in a newly
+ * created message.
+ *
+ * @exception JMSException if the JMS provider fails to clear the message
+ * body due to some internal error.
+ */
+
+ void
+ clearBody() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageConsumer.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageConsumer.java
new file mode 100644
index 0000000000..f6e7664b6e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageConsumer.java
@@ -0,0 +1,191 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** A client uses a <CODE>MessageConsumer</CODE> object to receive messages
+ * from a destination. A <CODE>MessageConsumer</CODE> object is created by
+ * passing a <CODE>Destination</CODE> object to a message-consumer creation
+ * method supplied by a session.
+ *
+ * <P><CODE>MessageConsumer</CODE> is the parent interface for all message
+ * consumers.
+ *
+ * <P>A message consumer can be created with a message selector. A message
+ * selector allows
+ * the client to restrict the messages delivered to the message consumer to
+ * those that match the selector.
+ *
+ * <P>A client may either synchronously receive a message consumer's messages
+ * or have the consumer asynchronously deliver them as they arrive.
+ *
+ * <P>For synchronous receipt, a client can request the next message from a
+ * message consumer using one of its <CODE>receive</CODE> methods. There are
+ * several variations of <CODE>receive</CODE> that allow a
+ * client to poll or wait for the next message.
+ *
+ * <P>For asynchronous delivery, a client can register a
+ * <CODE>MessageListener</CODE> object with a message consumer.
+ * As messages arrive at the message consumer, it delivers them by calling the
+ * <CODE>MessageListener</CODE>'s <CODE>onMessage</CODE> method.
+ *
+ * <P>It is a client programming error for a <CODE>MessageListener</CODE> to
+ * throw an exception.
+ *
+ * @version 1.0 - 13 March 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.QueueReceiver
+ * @see javax.jms.TopicSubscriber
+ * @see javax.jms.Session
+ */
+
+public interface MessageConsumer {
+
+ /** Gets this message consumer's message selector expression.
+ *
+ * @return this message consumer's message selector, or null if no
+ * message selector exists for the message consumer (that is, if
+ * the message selector was not set or was set to null or the
+ * empty string)
+ *
+ * @exception JMSException if the JMS provider fails to get the message
+ * selector due to some internal error.
+ */
+
+ String
+ getMessageSelector() throws JMSException;
+
+
+ /** Gets the message consumer's <CODE>MessageListener</CODE>.
+ *
+ * @return the listener for the message consumer, or null if no listener
+ * is set
+ *
+ * @exception JMSException if the JMS provider fails to get the message
+ * listener due to some internal error.
+ * @see javax.jms.MessageConsumer#setMessageListener
+ */
+
+ MessageListener
+ getMessageListener() throws JMSException;
+
+
+ /** Sets the message consumer's <CODE>MessageListener</CODE>.
+ *
+ * <P>Setting the message listener to null is the equivalent of
+ * unsetting the message listener for the message consumer.
+ *
+ * <P>The effect of calling <CODE>MessageConsumer.setMessageListener</CODE>
+ * while messages are being consumed by an existing listener
+ * or the consumer is being used to consume messages synchronously
+ * is undefined.
+ *
+ * @param listener the listener to which the messages are to be
+ * delivered
+ *
+ * @exception JMSException if the JMS provider fails to set the message
+ * listener due to some internal error.
+ * @see javax.jms.MessageConsumer#getMessageListener
+ */
+
+ void
+ setMessageListener(MessageListener listener) throws JMSException;
+
+
+ /** Receives the next message produced for this message consumer.
+ *
+ * <P>This call blocks indefinitely until a message is produced
+ * or until this message consumer is closed.
+ *
+ * <P>If this <CODE>receive</CODE> is done within a transaction, the
+ * consumer retains the message until the transaction commits.
+ *
+ * @return the next message produced for this message consumer, or
+ * null if this message consumer is concurrently closed
+ *
+ * @exception JMSException if the JMS provider fails to receive the next
+ * message due to some internal error.
+ *
+ */
+
+ Message
+ receive() throws JMSException;
+
+
+ /** Receives the next message that arrives within the specified
+ * timeout interval.
+ *
+ * <P>This call blocks until a message arrives, the
+ * timeout expires, or this message consumer is closed.
+ * A <CODE>timeout</CODE> of zero never expires, and the call blocks
+ * indefinitely.
+ *
+ * @param timeout the timeout value (in milliseconds)
+ *
+ * @return the next message produced for this message consumer, or
+ * null if the timeout expires or this message consumer is concurrently
+ * closed
+ *
+ * @exception JMSException if the JMS provider fails to receive the next
+ * message due to some internal error.
+ */
+
+ Message
+ receive(long timeout) throws JMSException;
+
+
+ /** Receives the next message if one is immediately available.
+ *
+ * @return the next message produced for this message consumer, or
+ * null if one is not available
+ *
+ * @exception JMSException if the JMS provider fails to receive the next
+ * message due to some internal error.
+ */
+
+ Message
+ receiveNoWait() throws JMSException;
+
+
+ /** Closes the message consumer.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a
+ * <CODE>MessageConsumer</CODE> outside the Java virtual machine, clients
+ * should close them when they
+ * are not needed. Relying on garbage collection to eventually reclaim
+ * these resources may not be timely enough.
+ *
+ * <P>This call blocks until a <CODE>receive</CODE> or message listener in
+ * progress has completed. A blocked message consumer <CODE>receive</CODE>
+ * call
+ * returns null when this message consumer is closed.
+ *
+ * @exception JMSException if the JMS provider fails to close the consumer
+ * due to some internal error.
+ */
+
+ void
+ close() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageEOFException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageEOFException.java
new file mode 100644
index 0000000000..1006ebd816
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageEOFException.java
@@ -0,0 +1,61 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when an unexpected
+ * end of stream has been reached when a <CODE>StreamMessage</CODE> or
+ * <CODE>BytesMessage</CODE> is being read.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class MessageEOFException extends JMSException {
+
+ /** Constructs a <CODE>MessageEOFException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ MessageEOFException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>MessageEOFException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ MessageEOFException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageFormatException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageFormatException.java
new file mode 100644
index 0000000000..50b685cf03
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageFormatException.java
@@ -0,0 +1,69 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a JMS client
+ * attempts to use a data type not supported by a message or attempts to
+ * read data in a message as the wrong type. It must also be thrown when
+ * equivalent type errors are made with message property values. For
+ * example, this exception must be thrown if
+ * <CODE>StreamMessage.writeObject</CODE> is given an unsupported class or
+ * if <CODE>StreamMessage.readShort</CODE> is used to read a
+ * <CODE>boolean</CODE> value. Note that the special case of a failure
+ * caused by an attempt to read improperly formatted <CODE>String</CODE>
+ * data as numeric values must throw the
+ * <CODE>java.lang.NumberFormatException</CODE>.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class MessageFormatException extends JMSException {
+
+ /** Constructs a <CODE>MessageFormatException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ MessageFormatException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>MessageFormatException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ MessageFormatException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageListener.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageListener.java
new file mode 100644
index 0000000000..a35fa42b4f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageListener.java
@@ -0,0 +1,51 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+
+/** A <CODE>MessageListener</CODE> object is used to receive asynchronously
+ * delivered messages.
+ *
+ * <P>Each session must insure that it passes messages serially to the
+ * listener. This means that a listener assigned to one or more consumers
+ * of the same session can assume that the <CODE>onMessage</CODE> method
+ * is not called with the next message until the session has completed the
+ * last call.
+ *
+ * @version 1.0 - 13 March 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ */
+
+public interface MessageListener {
+
+ /** Passes a message to the listener.
+ *
+ * @param message the message passed to the listener
+ */
+
+ void
+ onMessage(Message message);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotReadableException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotReadableException.java
new file mode 100644
index 0000000000..95c90b5352
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotReadableException.java
@@ -0,0 +1,60 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a JMS client attempts to read a
+ * write-only message.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class MessageNotReadableException extends JMSException {
+
+ /** Constructs a <CODE>MessageNotReadableException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ MessageNotReadableException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>MessageNotReadableException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ MessageNotReadableException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotWriteableException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotWriteableException.java
new file mode 100644
index 0000000000..b8852c9905
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageNotWriteableException.java
@@ -0,0 +1,60 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a JMS client attempts to write to a
+ * read-only message.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class MessageNotWriteableException extends JMSException {
+
+ /** Constructs a <CODE>MessageNotWriteableException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ MessageNotWriteableException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>MessageNotWriteableException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ MessageNotWriteableException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageProducer.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageProducer.java
new file mode 100644
index 0000000000..a9658bb771
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/MessageProducer.java
@@ -0,0 +1,389 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A client uses a <CODE>MessageProducer</CODE> object to send messages to a
+ * destination. A <CODE>MessageProducer</CODE> object is created by passing a
+ * <CODE>Destination</CODE> object to a message-producer creation method
+ * supplied by a session.
+ *
+ * <P><CODE>MessageProducer</CODE> is the parent interface for all message
+ * producers.
+ *
+ * <P>A client also has the option of creating a message producer without
+ * supplying a destination. In this case, a destination must be provided with
+ * every send operation. A typical use for this kind of message producer is
+ * to send replies to requests using the request's <CODE>JMSReplyTo</CODE>
+ * destination.
+ *
+ * <P>A client can specify a default delivery mode, priority, and time to live
+ * for messages sent by a message producer. It can also specify the delivery
+ * mode, priority, and time to live for an individual message.
+ *
+ * <P>A client can specify a time-to-live value in milliseconds for each
+ * message it sends. This value defines a message expiration time that
+ * is the sum of the message's time-to-live and the GMT when it is sent (for
+ * transacted sends, this is the time the client sends the message, not
+ * the time the transaction is committed).
+ *
+ * <P>A JMS provider should do its best to expire messages accurately;
+ * however, the JMS API does not define the accuracy provided.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.TopicPublisher
+ * @see javax.jms.QueueSender
+ * @see javax.jms.Session#createProducer
+ */
+
+public interface MessageProducer {
+
+ /** Sets whether message IDs are disabled.
+ *
+ * <P>Since message IDs take some effort to create and increase a
+ * message's size, some JMS providers may be able to optimize message
+ * overhead if they are given a hint that the message ID is not used by
+ * an application. By calling the <CODE>setDisableMessageID</CODE>
+ * method on this message producer, a JMS client enables this potential
+ * optimization for all messages sent by this message producer. If the JMS
+ * provider accepts this hint,
+ * these messages must have the message ID set to null; if the provider
+ * ignores the hint, the message ID must be set to its normal unique value.
+ *
+ * <P>Message IDs are enabled by default.
+ *
+ * @param value indicates if message IDs are disabled
+ *
+ * @exception JMSException if the JMS provider fails to set message ID to
+ * disabled due to some internal error.
+ */
+
+ void
+ setDisableMessageID(boolean value) throws JMSException;
+
+
+ /** Gets an indication of whether message IDs are disabled.
+ *
+ * @return an indication of whether message IDs are disabled
+ *
+ * @exception JMSException if the JMS provider fails to determine if
+ * message IDs are disabled due to some internal
+ * error.
+ */
+
+ boolean
+ getDisableMessageID() throws JMSException;
+
+
+ /** Sets whether message timestamps are disabled.
+ *
+ * <P>Since timestamps take some effort to create and increase a
+ * message's size, some JMS providers may be able to optimize message
+ * overhead if they are given a hint that the timestamp is not used by an
+ * application. By calling the <CODE>setDisableMessageTimestamp</CODE>
+ * method on this message producer, a JMS client enables this potential
+ * optimization for all messages sent by this message producer. If the
+ * JMS provider accepts this hint,
+ * these messages must have the timestamp set to zero; if the provider
+ * ignores the hint, the timestamp must be set to its normal value.
+ *
+ * <P>Message timestamps are enabled by default.
+ *
+ * @param value indicates if message timestamps are disabled
+ *
+ * @exception JMSException if the JMS provider fails to set timestamps to
+ * disabled due to some internal error.
+ */
+
+ void
+ setDisableMessageTimestamp(boolean value) throws JMSException;
+
+
+ /** Gets an indication of whether message timestamps are disabled.
+ *
+ * @return an indication of whether message timestamps are disabled
+ *
+ * @exception JMSException if the JMS provider fails to determine if
+ * timestamps are disabled due to some internal
+ * error.
+ */
+
+ boolean
+ getDisableMessageTimestamp() throws JMSException;
+
+
+ /** Sets the producer's default delivery mode.
+ *
+ * <P>Delivery mode is set to <CODE>PERSISTENT</CODE> by default.
+ *
+ * @param deliveryMode the message delivery mode for this message
+ * producer; legal values are <code>DeliveryMode.NON_PERSISTENT</code>
+ * and <code>DeliveryMode.PERSISTENT</code>
+ *
+ * @exception JMSException if the JMS provider fails to set the delivery
+ * mode due to some internal error.
+ *
+ * @see javax.jms.MessageProducer#getDeliveryMode
+ * @see javax.jms.DeliveryMode#NON_PERSISTENT
+ * @see javax.jms.DeliveryMode#PERSISTENT
+ * @see javax.jms.Message#DEFAULT_DELIVERY_MODE
+ */
+
+ void
+ setDeliveryMode(int deliveryMode) throws JMSException;
+
+
+ /** Gets the producer's default delivery mode.
+ *
+ * @return the message delivery mode for this message producer
+ *
+ * @exception JMSException if the JMS provider fails to get the delivery
+ * mode due to some internal error.
+ *
+ * @see javax.jms.MessageProducer#setDeliveryMode
+ */
+
+ int
+ getDeliveryMode() throws JMSException;
+
+
+ /** Sets the producer's default priority.
+ *
+ * <P>The JMS API defines ten levels of priority value, with 0 as the
+ * lowest priority and 9 as the highest. Clients should consider priorities
+ * 0-4 as gradations of normal priority and priorities 5-9 as gradations
+ * of expedited priority. Priority is set to 4 by default.
+ *
+ * @param defaultPriority the message priority for this message producer;
+ * must be a value between 0 and 9
+ *
+ *
+ * @exception JMSException if the JMS provider fails to set the priority
+ * due to some internal error.
+ *
+ * @see javax.jms.MessageProducer#getPriority
+ * @see javax.jms.Message#DEFAULT_PRIORITY
+ */
+
+ void
+ setPriority(int defaultPriority) throws JMSException;
+
+
+ /** Gets the producer's default priority.
+ *
+ * @return the message priority for this message producer
+ *
+ * @exception JMSException if the JMS provider fails to get the priority
+ * due to some internal error.
+ *
+ * @see javax.jms.MessageProducer#setPriority
+ */
+
+ int
+ getPriority() throws JMSException;
+
+
+ /** Sets the default length of time in milliseconds from its dispatch time
+ * that a produced message should be retained by the message system.
+ *
+ * <P>Time to live is set to zero by default.
+ *
+ * @param timeToLive the message time to live in milliseconds; zero is
+ * unlimited
+ *
+ * @exception JMSException if the JMS provider fails to set the time to
+ * live due to some internal error.
+ *
+ * @see javax.jms.MessageProducer#getTimeToLive
+ * @see javax.jms.Message#DEFAULT_TIME_TO_LIVE
+ */
+
+ void
+ setTimeToLive(long timeToLive) throws JMSException;
+
+
+ /** Gets the default length of time in milliseconds from its dispatch time
+ * that a produced message should be retained by the message system.
+ *
+ * @return the message time to live in milliseconds; zero is unlimited
+ *
+ * @exception JMSException if the JMS provider fails to get the time to
+ * live due to some internal error.
+ *
+ * @see javax.jms.MessageProducer#setTimeToLive
+ */
+
+ long
+ getTimeToLive() throws JMSException;
+
+ /** Gets the destination associated with this <CODE>MessageProducer</CODE>.
+ *
+ * @return this producer's <CODE>Destination/<CODE>
+ *
+ * @exception JMSException if the JMS provider fails to get the destination for
+ * this <CODE>MessageProducer</CODE>
+ * due to some internal error.
+ *@since 1.1
+ */
+
+ Destination
+ getDestination() throws JMSException;
+
+ /** Closes the message producer.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a
+ * <CODE>MessageProducer</CODE> outside the Java virtual machine, clients
+ * should close them when they
+ * are not needed. Relying on garbage collection to eventually reclaim
+ * these resources may not be timely enough.
+ *
+ * @exception JMSException if the JMS provider fails to close the producer
+ * due to some internal error.
+ */
+
+ void
+ close() throws JMSException;
+
+
+ /** Sends a message using the <CODE>MessageProducer</CODE>'s
+ * default delivery mode, priority, and time to live.
+ *
+ * @param message the message to send
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with a <CODE>MessageProducer</CODE> with
+ * an invalid destination.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>MessageProducer</CODE> that did
+ * not specify a destination at creation time.
+ *
+ * @see javax.jms.Session#createProducer
+ * @see javax.jms.MessageProducer
+ *
+ * @since 1.1
+ */
+
+ void
+ send(Message message) throws JMSException;
+
+ /** Sends a message to the destination, specifying delivery mode, priority, and
+ * time to live.
+ *
+ * @param message the message to send
+ * @param deliveryMode the delivery mode to use
+ * @param priority the priority for this message
+ * @param timeToLive the message's lifetime (in milliseconds)
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with a <CODE>MessageProducer</CODE> with
+ * an invalid destination.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>MessageProducer</CODE> that did
+ * not specify a destination at creation time.
+ *
+ * @see javax.jms.Session#createProducer
+ * @since 1.1
+ */
+
+ void
+ send(Message message,
+ int deliveryMode,
+ int priority,
+ long timeToLive) throws JMSException;
+
+
+ /**Sends a message to a destination for an unidentified message producer.
+ * Uses the <CODE>MessageProducer</CODE>'s default delivery mode, priority,
+ * and time to live.
+ *
+ * <P>Typically, a message producer is assigned a destination at creation
+ * time; however, the JMS API also supports unidentified message producers,
+ * which require that the destination be supplied every time a message is
+ * sent.
+ *
+ * @param destination the destination to send this message to
+ * @param message the message to send
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with an invalid destination.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>MessageProducer</CODE> that
+ * specified a destination at creation time.
+ *
+ * @see javax.jms.Session#createProducer
+ * @see javax.jms.MessageProducer
+ * @since 1.1
+ */
+
+ void
+ send(Destination destination, Message message) throws JMSException;
+
+
+ /** Sends a message to a destination for an unidentified message producer,
+ * specifying delivery mode, priority and time to live.
+ *
+ * <P>Typically, a message producer is assigned a destination at creation
+ * time; however, the JMS API also supports unidentified message producers,
+ * which require that the destination be supplied every time a message is
+ * sent.
+ *
+ * @param destination the destination to send this message to
+ * @param message the message to send
+ * @param deliveryMode the delivery mode to use
+ * @param priority the priority for this message
+ * @param timeToLive the message's lifetime (in milliseconds)
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with an invalid destination.
+ *
+ * @see javax.jms.Session#createProducer
+ * @since 1.1
+ */
+
+ void
+ send(Destination destination,
+ Message message,
+ int deliveryMode,
+ int priority,
+ long timeToLive) throws JMSException;
+
+
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ObjectMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ObjectMessage.java
new file mode 100644
index 0000000000..8c0fff03de
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ObjectMessage.java
@@ -0,0 +1,90 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+import java.io.Serializable;
+
+/** An <CODE>ObjectMessage</CODE> object is used to send a message that contains
+ * a serializable object in the Java programming language ("Java object").
+ * It inherits from the <CODE>Message</CODE> interface and adds a body
+ * containing a single reference to an object. Only <CODE>Serializable</CODE>
+ * Java objects can be used.
+ *
+ * <P>If a collection of Java objects must be sent, one of the
+ * <CODE>Collection</CODE> classes provided since JDK 1.2 can be used.
+ *
+ * <P>When a client receives an <CODE>ObjectMessage</CODE>, it is in read-only
+ * mode. If a client attempts to write to the message at this point, a
+ * <CODE>MessageNotWriteableException</CODE> is thrown. If
+ * <CODE>clearBody</CODE> is called, the message can now be both read from and
+ * written to.
+ *
+ * @version 1.0 - 6 August 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.Session#createObjectMessage()
+ * @see javax.jms.Session#createObjectMessage(Serializable)
+ * @see javax.jms.BytesMessage
+ * @see javax.jms.MapMessage
+ * @see javax.jms.Message
+ * @see javax.jms.StreamMessage
+ * @see javax.jms.TextMessage
+ */
+
+public interface ObjectMessage extends Message {
+
+ /** Sets the serializable object containing this message's data.
+ * It is important to note that an <CODE>ObjectMessage</CODE>
+ * contains a snapshot of the object at the time <CODE>setObject()</CODE>
+ * is called; subsequent modifications of the object will have no
+ * effect on the <CODE>ObjectMessage</CODE> body.
+ *
+ * @param object the message's data
+ *
+ * @exception JMSException if the JMS provider fails to set the object
+ * due to some internal error.
+ * @exception MessageFormatException if object serialization fails.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setObject(Serializable object) throws JMSException;
+
+
+ /** Gets the serializable object containing this message's data. The
+ * default value is null.
+ *
+ * @return the serializable object containing this message's data
+ *
+ * @exception JMSException if the JMS provider fails to get the object
+ * due to some internal error.
+ * @exception MessageFormatException if object deserialization fails.
+ */
+
+ Serializable
+ getObject() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Queue.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Queue.java
new file mode 100644
index 0000000000..0a9ec202cd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Queue.java
@@ -0,0 +1,81 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+
+/** A <CODE>Queue</CODE> object encapsulates a provider-specific queue name.
+ * It is the way a client specifies the identity of a queue to JMS API methods.
+ * For those methods that use a <CODE>Destination</CODE> as a parameter, a
+ * <CODE>Queue</CODE> object used as an argument. For example, a queue can
+ * be used to create a <CODE>MessageConsumer</CODE> and a
+ * <CODE>MessageProducer</CODE> by calling:
+ *<UL>
+ *<LI> <CODE>Session.CreateConsumer(Destination destination)</CODE>
+ *<LI> <CODE>Session.CreateProducer(Destination destination)</CODE>
+ *
+ *</UL>
+ *
+ * <P>The actual length of time messages are held by a queue and the
+ * consequences of resource overflow are not defined by the JMS API.
+ *
+ *
+ *
+ * @version 1.1 February 2 - 2000
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see Session#createConsumer(Destination)
+ * @see Session#createProducer(Destination)
+ * @see Session#createQueue(String)
+ * @see QueueSession#createQueue(String)
+ */
+
+public interface Queue extends Destination {
+
+ /** Gets the name of this queue.
+ *
+ * <P>Clients that depend upon the name are not portable.
+ *
+ * @return the queue name
+ *
+ * @exception JMSException if the JMS provider implementation of
+ * <CODE>Queue</CODE> fails to return the queue
+ * name due to some internal
+ * error.
+ */
+
+ String
+ getQueueName() throws JMSException;
+
+
+ /** Returns a string representation of this object.
+ *
+ * @return the provider-specific identity values for this queue
+ */
+
+ String
+ toString();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueBrowser.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueBrowser.java
new file mode 100644
index 0000000000..0bb06ffb55
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueBrowser.java
@@ -0,0 +1,115 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+import java.util.Enumeration;
+
+/** A client uses a <CODE>QueueBrowser</CODE> object to look at messages on a
+ * queue without removing them.
+ *
+ * <P>The <CODE>getEnumeration</CODE> method returns a
+ * <CODE>java.util.Enumeration</CODE> that is used to scan
+ * the queue's messages. It may be an enumeration of the entire content of a
+ * queue, or it may contain only the messages matching a message selector.
+ *
+ * <P>Messages may be arriving and expiring while the scan is done. The JMS API
+ * does
+ * not require the content of an enumeration to be a static snapshot of queue
+ * content. Whether these changes are visible or not depends on the JMS
+ * provider.
+ *
+ *<P>A <CODE>QueueBrowser</CODE> can be created from either a
+ * <CODE>Session</CODE> or a <CODE> QueueSession</CODE>.
+ *
+ * @version 1.1 April 9, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session#createBrowser
+ * @see javax.jms.QueueSession#createBrowser
+ * @see javax.jms.QueueReceiver
+ */
+
+public interface QueueBrowser {
+
+ /** Gets the queue associated with this queue browser.
+ *
+ * @return the queue
+ *
+ * @exception JMSException if the JMS provider fails to get the
+ * queue associated with this browser
+ * due to some internal error.
+ */
+
+ Queue
+ getQueue() throws JMSException;
+
+
+ /** Gets this queue browser's message selector expression.
+ *
+ * @return this queue browser's message selector, or null if no
+ * message selector exists for the message consumer (that is, if
+ * the message selector was not set or was set to null or the
+ * empty string)
+ *
+ * @exception JMSException if the JMS provider fails to get the
+ * message selector for this browser
+ * due to some internal error.
+ */
+
+ String
+ getMessageSelector() throws JMSException;
+
+
+ /** Gets an enumeration for browsing the current queue messages in the
+ * order they would be received.
+ *
+ * @return an enumeration for browsing the messages
+ *
+ * @exception JMSException if the JMS provider fails to get the
+ * enumeration for this browser
+ * due to some internal error.
+ */
+
+ Enumeration
+ getEnumeration() throws JMSException;
+
+
+ /** Closes the <CODE>QueueBrowser</CODE>.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a
+ * QueueBrowser outside the Java virtual machine, clients should close them
+ * when they
+ * are not needed. Relying on garbage collection to eventually reclaim
+ * these resources may not be timely enough.
+ *
+ * @exception JMSException if the JMS provider fails to close this
+ * browser due to some internal error.
+ */
+
+ void
+ close() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnection.java
new file mode 100644
index 0000000000..ef21a6db56
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnection.java
@@ -0,0 +1,118 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>QueueConnection</CODE> object is an active connection to a
+ * point-to-point JMS provider. A client uses a <CODE>QueueConnection</CODE>
+ * object to create one or more <CODE>QueueSession</CODE> objects
+ * for producing and consuming messages.
+ *
+ *<P>A <CODE>QueueConnection</CODE> can be used to create a
+ * <CODE>QueueSession</CODE>, from which specialized queue-related objects
+ * can be created.
+ * A more general, and recommended, approach is to use the
+ * <CODE>Connection</CODE> object.
+ *
+ *
+ * <P>The <CODE>QueueConnection</CODE> object
+ * should be used to support existing code that has already used it.
+ *
+ * <P>A <CODE>QueueConnection</CODE> cannot be used to create objects
+ * specific to the publish/subscribe domain. The
+ * <CODE>createDurableConnectionConsumer</CODE> method inherits
+ * from <CODE>Connection</CODE>, but must throw an
+ * <CODE>IllegalStateException</CODE>
+ * if used from <CODE>QueueConnection</CODE>.
+ *
+ * @version 1.1 - April 9, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Connection
+ * @see javax.jms.ConnectionFactory
+ * @see javax.jms.QueueConnectionFactory
+ */
+
+public interface QueueConnection extends Connection {
+
+ /** Creates a <CODE>QueueSession</CODE> object.
+ *
+ * @param transacted indicates whether the session is transacted
+ * @param acknowledgeMode indicates whether the consumer or the
+ * client will acknowledge any messages it receives; ignored if the session
+ * is transacted. Legal values are <code>Session.AUTO_ACKNOWLEDGE</code>,
+ * <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+ * <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+ *
+ * @return a newly created queue session
+ *
+ * @exception JMSException if the <CODE>QueueConnection</CODE> object fails
+ * to create a session due to some internal error or
+ * lack of support for the specific transaction
+ * and acknowledgement mode.
+ *
+ * @see Session#AUTO_ACKNOWLEDGE
+ * @see Session#CLIENT_ACKNOWLEDGE
+ * @see Session#DUPS_OK_ACKNOWLEDGE
+ */
+
+ QueueSession
+ createQueueSession(boolean transacted,
+ int acknowledgeMode) throws JMSException;
+
+
+ /** Creates a connection consumer for this connection (optional operation).
+ * This is an expert facility not used by regular JMS clients.
+ *
+ * @param queue the queue to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param sessionPool the server session pool to associate with this
+ * connection consumer
+ * @param maxMessages the maximum number of messages that can be
+ * assigned to a server session at one time
+ *
+ * @return the connection consumer
+ *
+ * @exception JMSException if the <CODE>QueueConnection</CODE> object fails
+ * to create a connection consumer due to some
+ * internal error or invalid arguments for
+ * <CODE>sessionPool</CODE> and
+ * <CODE>messageSelector</CODE>.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ * @see javax.jms.ConnectionConsumer
+ */
+
+ ConnectionConsumer
+ createConnectionConsumer(Queue queue,
+ String messageSelector,
+ ServerSessionPool sessionPool,
+ int maxMessages)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnectionFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnectionFactory.java
new file mode 100644
index 0000000000..dd1d570c82
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueConnectionFactory.java
@@ -0,0 +1,87 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+
+package javax.jms;
+
+/** A client uses a <CODE>QueueConnectionFactory</CODE> object to create
+ * <CODE>QueueConnection</CODE> objects with a point-to-point JMS provider.
+ *
+ * <P><CODE>QueueConnectionFactory</CODE> can be used to create a
+ * <CODE>QueueConnection</CODE>, from which specialized queue-related objects
+ * can be created. A more general, and recommended, approach
+ * is to use the <CODE>ConnectionFactory</CODE> object.
+ *
+ *<P> The <CODE>QueueConnectionFactory</CODE> object
+ * can be used to support existing code that already uses it.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.ConnectionFactory
+ */
+
+public interface QueueConnectionFactory extends ConnectionFactory {
+
+ /** Creates a queue connection with the default user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ .
+ *
+ * @return a newly created queue connection
+ *
+ * @exception JMSException if the JMS provider fails to create the queue
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ QueueConnection
+ createQueueConnection() throws JMSException;
+
+
+ /** Creates a queue connection with the specified user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @param userName the caller's user name
+ * @param password the caller's password
+ *
+ * @return a newly created queue connection
+ *
+ * @exception JMSException if the JMS provider fails to create the queue
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ QueueConnection
+ createQueueConnection(String userName, String password)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueReceiver.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueReceiver.java
new file mode 100644
index 0000000000..20d3300b82
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueReceiver.java
@@ -0,0 +1,73 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+
+/** A client uses a <CODE>QueueReceiver</CODE> object to receive messages that
+ * have been delivered to a queue.
+ *
+ * <P>Although it is possible to have multiple <CODE>QueueReceiver</CODE>s
+ * for the same queue, the JMS API does not define how messages are
+ * distributed between the <CODE>QueueReceiver</CODE>s.
+ *
+ * <P>If a <CODE>QueueReceiver</CODE> specifies a message selector, the
+ * messages that are not selected remain on the queue. By definition, a message
+ * selector allows a <CODE>QueueReceiver</CODE> to skip messages. This
+ * means that when the skipped messages are eventually read, the total ordering
+ * of the reads does not retain the partial order defined by each message
+ * producer. Only <CODE>QueueReceiver</CODE>s without a message selector
+ * will read messages in message producer order.
+ *
+ * <P>Creating a <CODE>MessageConsumer</CODE> provides the same features as
+ * creating a <CODE>QueueReceiver</CODE>. A <CODE>MessageConsumer</CODE> object is
+ * recommended for creating new code. The <CODE>QueueReceiver</CODE> is
+ * provided to support existing code.
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session#createConsumer(Destination, String)
+ * @see javax.jms.Session#createConsumer(Destination)
+ * @see javax.jms.QueueSession#createReceiver(Queue, String)
+ * @see javax.jms.QueueSession#createReceiver(Queue)
+ * @see javax.jms.MessageConsumer
+ */
+
+public interface QueueReceiver extends MessageConsumer {
+
+ /** Gets the <CODE>Queue</CODE> associated with this queue receiver.
+ *
+ * @return this receiver's <CODE>Queue</CODE>
+ *
+ * @exception JMSException if the JMS provider fails to get the queue for
+ * this queue receiver
+ * due to some internal error.
+ */
+
+ Queue
+ getQueue() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueRequestor.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueRequestor.java
new file mode 100644
index 0000000000..68860de448
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueRequestor.java
@@ -0,0 +1,124 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** The <CODE>QueueRequestor</CODE> helper class simplifies
+ * making service requests.
+ *
+ * <P>The <CODE>QueueRequestor</CODE> constructor is given a non-transacted
+ * <CODE>QueueSession</CODE> and a destination <CODE>Queue</CODE>. It creates a
+ * <CODE>TemporaryQueue</CODE> for the responses and provides a
+ * <CODE>request</CODE> method that sends the request message and waits
+ * for its reply.
+ *
+ * <P>This is a basic request/reply abstraction that should be sufficient
+ * for most uses. JMS providers and clients are free to create more
+ * sophisticated versions.
+ *
+ * @version 1.0 - 8 July 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.TopicRequestor
+ */
+
+public class QueueRequestor {
+
+ QueueSession session; // The queue session the queue belongs to.
+ Queue queue; // The queue to perform the request/reply on.
+ TemporaryQueue tempQueue;
+ QueueSender sender;
+ QueueReceiver receiver;
+
+
+ /** Constructor for the <CODE>QueueRequestor</CODE> class.
+ *
+ * <P>This implementation assumes the session parameter to be non-transacted,
+ * with a delivery mode of either <CODE>AUTO_ACKNOWLEDGE</CODE> or
+ * <CODE>DUPS_OK_ACKNOWLEDGE</CODE>.
+ *
+ * @param session the <CODE>QueueSession</CODE> the queue belongs to
+ * @param queue the queue to perform the request/reply call on
+ *
+ * @exception JMSException if the JMS provider fails to create the
+ * <CODE>QueueRequestor</CODE> due to some internal
+ * error.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ */
+
+ public
+ QueueRequestor(QueueSession session, Queue queue) throws JMSException {
+ this.session = session;
+ this.queue = queue;
+ tempQueue = session.createTemporaryQueue();
+ sender = session.createSender(queue);
+ receiver = session.createReceiver(tempQueue);
+ }
+
+
+ /** Sends a request and waits for a reply. The temporary queue is used for
+ * the <CODE>JMSReplyTo</CODE> destination, and only one reply per request
+ * is expected.
+ *
+ * @param message the message to send
+ *
+ * @return the reply message
+ *
+ * @exception JMSException if the JMS provider fails to complete the
+ * request due to some internal error.
+ */
+
+ public Message
+ request(Message message) throws JMSException {
+ message.setJMSReplyTo(tempQueue);
+ sender.send(message);
+ return (receiver.receive());
+ }
+
+
+ /** Closes the <CODE>QueueRequestor</CODE> and its session.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a
+ * <CODE>QueueRequestor</CODE> outside the Java virtual machine, clients
+ * should close them when they
+ * are not needed. Relying on garbage collection to eventually reclaim
+ * these resources may not be timely enough.
+ *
+ * <P>Note that this method closes the <CODE>QueueSession</CODE> object
+ * passed to the <CODE>QueueRequestor</CODE> constructor.
+ *
+ * @exception JMSException if the JMS provider fails to close the
+ * <CODE>QueueRequestor</CODE> due to some internal
+ * error.
+ */
+
+ public void
+ close() throws JMSException {
+
+ // publisher and consumer created by constructor are implicitly closed.
+ session.close();
+ tempQueue.delete();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSender.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSender.java
new file mode 100644
index 0000000000..57035f7a6e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSender.java
@@ -0,0 +1,197 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A client uses a <CODE>QueueSender</CODE> object to send messages to a queue.
+ *
+ * <P>Normally, the <CODE>Queue</CODE> is specified when a
+ * <CODE>QueueSender</CODE> is created. In this case, an attempt to use
+ * the <CODE>send</CODE> methods for an unidentified
+ * <CODE>QueueSender</CODE> will throw a
+ * <CODE>java.lang.UnsupportedOperationException</CODE>.
+ *
+ * <P>If the <CODE>QueueSender</CODE> is created with an unidentified
+ * <CODE>Queue</CODE>, an attempt to use the <CODE>send</CODE> methods that
+ * assume that the <CODE>Queue</CODE> has been identified will throw a
+ * <CODE>java.lang.UnsupportedOperationException</CODE>.
+ *
+ * <P>During the execution of its <CODE>send</CODE> method, a message
+ * must not be changed by other threads within the client.
+ * If the message is modified, the result of the <CODE>send</CODE> is
+ * undefined.
+ *
+ * <P>After sending a message, a client may retain and modify it
+ * without affecting the message that has been sent. The same message
+ * object may be sent multiple times.
+ *
+ * <P>The following message headers are set as part of sending a
+ * message: <code>JMSDestination</code>, <code>JMSDeliveryMode</code>,
+ * <code>JMSExpiration</code>, <code>JMSPriority</code>,
+ * <code>JMSMessageID</code> and <code>JMSTimeStamp</code>.
+ * When the message is sent, the values of these headers are ignored.
+ * After the completion of the <CODE>send</CODE>, the headers hold the values
+ * specified by the method sending the message. It is possible for the
+ * <code>send</code> method not to set <code>JMSMessageID</code> and
+ * <code>JMSTimeStamp</code> if the
+ * setting of these headers is explicitly disabled by the
+ * <code>MessageProducer.setDisableMessageID</code> or
+ * <code>MessageProducer.setDisableMessageTimestamp</code> method.
+ *
+ * <P>Creating a <CODE>MessageProducer</CODE> provides the same features as
+ * creating a <CODE>QueueSender</CODE>. A <CODE>MessageProducer</CODE> object is
+ * recommended when creating new code. The <CODE>QueueSender</CODE> is
+ * provided to support existing code.
+ *
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.MessageProducer
+ * @see javax.jms.Session#createProducer(Destination)
+ * @see javax.jms.QueueSession#createSender(Queue)
+ */
+
+public interface QueueSender extends MessageProducer {
+
+ /** Gets the queue associated with this <CODE>QueueSender</CODE>.
+ *
+ * @return this sender's queue
+ *
+ * @exception JMSException if the JMS provider fails to get the queue for
+ * this <CODE>QueueSender</CODE>
+ * due to some internal error.
+ */
+
+ Queue
+ getQueue() throws JMSException;
+
+
+ /** Sends a message to the queue. Uses the <CODE>QueueSender</CODE>'s
+ * default delivery mode, priority, and time to live.
+ *
+ * @param message the message to send
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with a <CODE>QueueSender</CODE> with
+ * an invalid queue.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>QueueSender</CODE> that did
+ * not specify a queue at creation time.
+ *
+ * @see javax.jms.MessageProducer#getDeliveryMode()
+ * @see javax.jms.MessageProducer#getTimeToLive()
+ * @see javax.jms.MessageProducer#getPriority()
+ */
+
+ void
+ send(Message message) throws JMSException;
+
+
+ /** Sends a message to the queue, specifying delivery mode, priority, and
+ * time to live.
+ *
+ * @param message the message to send
+ * @param deliveryMode the delivery mode to use
+ * @param priority the priority for this message
+ * @param timeToLive the message's lifetime (in milliseconds)
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with a <CODE>QueueSender</CODE> with
+ * an invalid queue.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>QueueSender</CODE> that did
+ * not specify a queue at creation time.
+ */
+
+ void
+ send(Message message,
+ int deliveryMode,
+ int priority,
+ long timeToLive) throws JMSException;
+
+
+ /** Sends a message to a queue for an unidentified message producer.
+ * Uses the <CODE>QueueSender</CODE>'s default delivery mode, priority,
+ * and time to live.
+ *
+ * <P>Typically, a message producer is assigned a queue at creation
+ * time; however, the JMS API also supports unidentified message producers,
+ * which require that the queue be supplied every time a message is
+ * sent.
+ *
+ * @param queue the queue to send this message to
+ * @param message the message to send
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with an invalid queue.
+ *
+ * @see javax.jms.MessageProducer#getDeliveryMode()
+ * @see javax.jms.MessageProducer#getTimeToLive()
+ * @see javax.jms.MessageProducer#getPriority()
+ */
+
+ void
+ send(Queue queue, Message message) throws JMSException;
+
+
+ /** Sends a message to a queue for an unidentified message producer,
+ * specifying delivery mode, priority and time to live.
+ *
+ * <P>Typically, a message producer is assigned a queue at creation
+ * time; however, the JMS API also supports unidentified message producers,
+ * which require that the queue be supplied every time a message is
+ * sent.
+ *
+ * @param queue the queue to send this message to
+ * @param message the message to send
+ * @param deliveryMode the delivery mode to use
+ * @param priority the priority for this message
+ * @param timeToLive the message's lifetime (in milliseconds)
+ *
+ * @exception JMSException if the JMS provider fails to send the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with an invalid queue.
+ */
+
+ void
+ send(Queue queue,
+ Message message,
+ int deliveryMode,
+ int priority,
+ long timeToLive) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSession.java
new file mode 100644
index 0000000000..1c9399205e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/QueueSession.java
@@ -0,0 +1,187 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+
+package javax.jms;
+
+/** A <CODE>QueueSession</CODE> object provides methods for creating
+ * <CODE>QueueReceiver</CODE>, <CODE>QueueSender</CODE>,
+ * <CODE>QueueBrowser</CODE>, and <CODE>TemporaryQueue</CODE> objects.
+ *
+ * <P>If there are messages that have been received but not acknowledged
+ * when a <CODE>QueueSession</CODE> terminates, these messages will be retained
+ * and redelivered when a consumer next accesses the queue.
+ *
+ *<P>A <CODE>QueueSession</CODE> is used for creating Point-to-Point specific
+ * objects. In general, use the <CODE>Session</CODE> object.
+ * The <CODE>QueueSession</CODE> is used to support
+ * existing code. Using the <CODE>Session</CODE> object simplifies the
+ * programming model, and allows transactions to be used across the two
+ * messaging domains.
+ *
+ * <P>A <CODE>QueueSession</CODE> cannot be used to create objects specific to the
+ * publish/subscribe domain. The following methods inherit from
+ * <CODE>Session</CODE>, but must throw an
+ * <CODE>IllegalStateException</CODE>
+ * if they are used from <CODE>QueueSession</CODE>:
+ *<UL>
+ * <LI><CODE>createDurableSubscriber</CODE>
+ * <LI><CODE>createTemporaryTopic</CODE>
+ * <LI><CODE>createTopic</CODE>
+ * <LI><CODE>unsubscribe</CODE>
+ * </UL>
+ *
+ * @version 1.1 - April 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session
+ * @see javax.jms.QueueConnection#createQueueSession(boolean, int)
+ * @see javax.jms.XAQueueSession#getQueueSession()
+ */
+
+public interface QueueSession extends Session {
+
+ /** Creates a queue identity given a <CODE>Queue</CODE> name.
+ *
+ * <P>This facility is provided for the rare cases where clients need to
+ * dynamically manipulate queue identity. It allows the creation of a
+ * queue identity with a provider-specific name. Clients that depend
+ * on this ability are not portable.
+ *
+ * <P>Note that this method is not for creating the physical queue.
+ * The physical creation of queues is an administrative task and is not
+ * to be initiated by the JMS API. The one exception is the
+ * creation of temporary queues, which is accomplished with the
+ * <CODE>createTemporaryQueue</CODE> method.
+ *
+ * @param queueName the name of this <CODE>Queue</CODE>
+ *
+ * @return a <CODE>Queue</CODE> with the given name
+ *
+ * @exception JMSException if the session fails to create a queue
+ * due to some internal error.
+ */
+
+ Queue
+ createQueue(String queueName) throws JMSException;
+
+
+ /** Creates a <CODE>QueueReceiver</CODE> object to receive messages from the
+ * specified queue.
+ *
+ * @param queue the <CODE>Queue</CODE> to access
+ *
+ * @exception JMSException if the session fails to create a receiver
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ */
+
+ QueueReceiver
+ createReceiver(Queue queue) throws JMSException;
+
+
+ /** Creates a <CODE>QueueReceiver</CODE> object to receive messages from the
+ * specified queue using a message selector.
+ *
+ * @param queue the <CODE>Queue</CODE> to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ *
+ * @exception JMSException if the session fails to create a receiver
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ *
+ */
+
+ QueueReceiver
+ createReceiver(Queue queue,
+ String messageSelector) throws JMSException;
+
+
+ /** Creates a <CODE>QueueSender</CODE> object to send messages to the
+ * specified queue.
+ *
+ * @param queue the <CODE>Queue</CODE> to access, or null if this is an
+ * unidentified producer
+ *
+ * @exception JMSException if the session fails to create a sender
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ */
+
+ QueueSender
+ createSender(Queue queue) throws JMSException;
+
+
+ /** Creates a <CODE>QueueBrowser</CODE> object to peek at the messages on
+ * the specified queue.
+ *
+ * @param queue the <CODE>Queue</CODE> to access
+ *
+ * @exception JMSException if the session fails to create a browser
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ */
+
+ QueueBrowser
+ createBrowser(Queue queue) throws JMSException;
+
+
+ /** Creates a <CODE>QueueBrowser</CODE> object to peek at the messages on
+ * the specified queue using a message selector.
+ *
+ * @param queue the <CODE>Queue</CODE> to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ *
+ * @exception JMSException if the session fails to create a browser
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid queue is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ */
+
+ QueueBrowser
+ createBrowser(Queue queue,
+ String messageSelector) throws JMSException;
+
+
+ /** Creates a <CODE>TemporaryQueue</CODE> object. Its lifetime will be that
+ * of the <CODE>QueueConnection</CODE> unless it is deleted earlier.
+ *
+ * @return a temporary queue identity
+ *
+ * @exception JMSException if the session fails to create a temporary queue
+ * due to some internal error.
+ */
+
+ TemporaryQueue
+ createTemporaryQueue() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ResourceAllocationException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ResourceAllocationException.java
new file mode 100644
index 0000000000..9a865d2752
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ResourceAllocationException.java
@@ -0,0 +1,63 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/**
+ * <P>This exception is thrown when a provider is unable to allocate the
+ * resources required by a method. For example, this exception should be
+ * thrown when a call to
+ * <CODE>TopicConnectionFactory.createTopicConnection</CODE> fails due to a
+ * lack of JMS provider resources.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class ResourceAllocationException extends JMSException {
+
+ /** Constructs a <CODE>ResourceAllocationException</CODE> with the specified
+ * reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ ResourceAllocationException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>ResourceAllocationException</CODE> with the specified
+ * reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ ResourceAllocationException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSession.java
new file mode 100644
index 0000000000..85a224e1fd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSession.java
@@ -0,0 +1,102 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>ServerSession</CODE> object is an application server object that
+ * is used by a server to associate a thread with a JMS session (optional).
+ *
+ * <P>A <CODE>ServerSession</CODE> implements two methods:
+ *
+ * <UL>
+ * <LI><CODE>getSession</CODE> - returns the <CODE>ServerSession</CODE>'s
+ * JMS session.
+ * <LI><CODE>start</CODE> - starts the execution of the
+ * <CODE>ServerSession</CODE>
+ * thread and results in the execution of the JMS session's
+ * <CODE>run</CODE> method.
+ * </UL>
+ *
+ * <P>A <CODE>ConnectionConsumer</CODE> implemented by a JMS provider uses a
+ * <CODE>ServerSession</CODE> to process one or more messages that have
+ * arrived. It does this by getting a <CODE>ServerSession</CODE> from the
+ * <CODE>ConnectionConsumer</CODE>'s <CODE>ServerSessionPool</CODE>; getting
+ * the <CODE>ServerSession</CODE>'s JMS session; loading it with the messages;
+ * and then starting the <CODE>ServerSession</CODE>.
+ *
+ * <P>In most cases the <CODE>ServerSession</CODE> will register some object
+ * it provides as the <CODE>ServerSession</CODE>'s thread run object. The
+ * <CODE>ServerSession</CODE>'s <CODE>start</CODE> method will call the
+ * thread's <CODE>start</CODE> method, which will start the new thread, and
+ * from it, call the <CODE>run</CODE> method of the
+ * <CODE>ServerSession</CODE>'s run object. This object will do some
+ * housekeeping and then call the <CODE>Session</CODE>'s <CODE>run</CODE>
+ * method. When <CODE>run</CODE> returns, the <CODE>ServerSession</CODE>'s run
+ * object can return the <CODE>ServerSession</CODE> to the
+ * <CODE>ServerSessionPool</CODE>, and the cycle starts again.
+ *
+ * <P>Note that the JMS API does not architect how the
+ * <CODE>ConnectionConsumer</CODE> loads the <CODE>Session</CODE> with
+ * messages. Since both the <CODE>ConnectionConsumer</CODE> and
+ * <CODE>Session</CODE> are implemented by the same JMS provider, they can
+ * accomplish the load using a private mechanism.
+ *
+ * @version 1.0 - 9 March 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.ServerSessionPool
+ * @see javax.jms.ConnectionConsumer
+ */
+
+public interface ServerSession {
+
+ /** Return the <CODE>ServerSession</CODE>'s <CODE>Session</CODE>. This must
+ * be a <CODE>Session</CODE> created by the same <CODE>Connection</CODE>
+ * that will be dispatching messages to it. The provider will assign one or
+ * more messages to the <CODE>Session</CODE>
+ * and then call <CODE>start</CODE> on the <CODE>ServerSession</CODE>.
+ *
+ * @return the server session's session
+ *
+ * @exception JMSException if the JMS provider fails to get the associated
+ * session for this <CODE>ServerSession</CODE> due
+ * to some internal error.
+ **/
+
+ Session
+ getSession() throws JMSException;
+
+
+ /** Cause the <CODE>Session</CODE>'s <CODE>run</CODE> method to be called
+ * to process messages that were just assigned to it.
+ *
+ * @exception JMSException if the JMS provider fails to start the server
+ * session to process messages due to some internal
+ * error.
+ */
+
+ void
+ start() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSessionPool.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSessionPool.java
new file mode 100644
index 0000000000..858b937a2a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/ServerSessionPool.java
@@ -0,0 +1,63 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>ServerSessionPool</CODE> object is an object implemented by an
+ * application server to provide a pool of <CODE>ServerSession</CODE> objects
+ * for processing the messages of a <CODE>ConnectionConsumer</CODE> (optional).
+ *
+ * <P>Its only method is <CODE>getServerSession</CODE>. The JMS API does not
+ * architect how the pool is implemented. It could be a static pool of
+ * <CODE>ServerSession</CODE> objects, or it could use a sophisticated
+ * algorithm to dynamically create <CODE>ServerSession</CODE> objects as
+ * needed.
+ *
+ * <P>If the <CODE>ServerSessionPool</CODE> is out of
+ * <CODE>ServerSession</CODE> objects, the <CODE>getServerSession</CODE> call
+ * may block. If a <CODE>ConnectionConsumer</CODE> is blocked, it cannot
+ * deliver new messages until a <CODE>ServerSession</CODE> is
+ * eventually returned.
+ *
+ * @version 1.0 - 9 March 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.ServerSession
+ */
+
+public interface ServerSessionPool {
+
+ /** Return a server session from the pool.
+ *
+ * @return a server session from the pool
+ *
+ * @exception JMSException if an application server fails to
+ * return a <CODE>ServerSession</CODE> out of its
+ * server session pool.
+ */
+
+ ServerSession
+ getServerSession() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Session.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Session.java
new file mode 100644
index 0000000000..c71cddfd48
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Session.java
@@ -0,0 +1,807 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+
+package javax.jms;
+
+import java.io.Serializable;
+
+/** <P>A <CODE>Session</CODE> object is a single-threaded context for producing and consuming
+ * messages. Although it may allocate provider resources outside the Java
+ * virtual machine (JVM), it is considered a lightweight JMS object.
+ *
+ * <P>A session serves several purposes:
+ *
+ * <UL>
+ * <LI>It is a factory for its message producers and consumers.
+ * <LI>It supplies provider-optimized message factories.
+ * <LI>It is a factory for <CODE>TemporaryTopics</CODE> and
+ * <CODE>TemporaryQueues</CODE>.
+ * <LI> It provides a way to create <CODE>Queue</CODE> or <CODE>Topic</CODE>
+ * objects for those clients that need to dynamically manipulate
+ * provider-specific destination names.
+ * <LI>It supports a single series of transactions that combine work
+ * spanning its producers and consumers into atomic units.
+ * <LI>It defines a serial order for the messages it consumes and
+ * the messages it produces.
+ * <LI>It retains messages it consumes until they have been
+ * acknowledged.
+ * <LI>It serializes execution of message listeners registered with
+ * its message consumers.
+ * <LI> It is a factory for <CODE>QueueBrowsers</CODE>.
+ * </UL>
+ *
+ * <P>A session can create and service multiple message producers and
+ * consumers.
+ *
+ * <P>One typical use is to have a thread block on a synchronous
+ * <CODE>MessageConsumer</CODE> until a message arrives. The thread may then
+ * use one or more of the <CODE>Session</CODE>'s <CODE>MessageProducer</CODE>s.
+ *
+ * <P>If a client desires to have one thread produce messages while others
+ * consume them, the client should use a separate session for its producing
+ * thread.
+ *
+ * <P>Once a connection has been started, any session with one or more
+ * registered message listeners is dedicated to the thread of control that
+ * delivers messages to it. It is erroneous for client code to use this session
+ * or any of its constituent objects from another thread of control. The
+ * only exception to this rule is the use of the session or connection
+ * <CODE>close</CODE> method.
+ *
+ * <P>It should be easy for most clients to partition their work naturally
+ * into sessions. This model allows clients to start simply and incrementally
+ * add message processing complexity as their need for concurrency grows.
+ *
+ * <P>The <CODE>close</CODE> method is the only session method that can be
+ * called while some other session method is being executed in another thread.
+ *
+ * <P>A session may be specified as transacted. Each transacted
+ * session supports a single series of transactions. Each transaction groups
+ * a set of message sends and a set of message receives into an atomic unit
+ * of work. In effect, transactions organize a session's input message
+ * stream and output message stream into series of atomic units. When a
+ * transaction commits, its atomic unit of input is acknowledged and its
+ * associated atomic unit of output is sent. If a transaction rollback is
+ * done, the transaction's sent messages are destroyed and the session's input
+ * is automatically recovered.
+ *
+ * <P>The content of a transaction's input and output units is simply those
+ * messages that have been produced and consumed within the session's current
+ * transaction.
+ *
+ * <P>A transaction is completed using either its session's <CODE>commit</CODE>
+ * method or its session's <CODE>rollback</CODE> method. The completion of a
+ * session's current transaction automatically begins the next. The result is
+ * that a transacted session always has a current transaction within which its
+ * work is done.
+ *
+ * <P>The Java Transaction Service (JTS) or some other transaction monitor may
+ * be used to combine a session's transaction with transactions on other
+ * resources (databases, other JMS sessions, etc.). Since Java distributed
+ * transactions are controlled via the Java Transaction API (JTA), use of the
+ * session's <CODE>commit</CODE> and <CODE>rollback</CODE> methods in
+ * this context is prohibited.
+ *
+ * <P>The JMS API does not require support for JTA; however, it does define
+ * how a provider supplies this support.
+ *
+ * <P>Although it is also possible for a JMS client to handle distributed
+ * transactions directly, it is unlikely that many JMS clients will do this.
+ * Support for JTA in the JMS API is targeted at systems vendors who will be
+ * integrating the JMS API into their application server products.
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.QueueSession
+ * @see javax.jms.TopicSession
+ * @see javax.jms.XASession
+ */
+
+public interface Session extends Runnable {
+
+ /** With this acknowledgment mode, the session automatically acknowledges
+ * a client's receipt of a message either when the session has successfully
+ * returned from a call to <CODE>receive</CODE> or when the message
+ * listener the session has called to process the message successfully
+ * returns.
+ */
+
+ static final int AUTO_ACKNOWLEDGE = 1;
+
+ /** With this acknowledgment mode, the client acknowledges a consumed
+ * message by calling the message's <CODE>acknowledge</CODE> method.
+ * Acknowledging a consumed message acknowledges all messages that the
+ * session has consumed.
+ *
+ * <P>When client acknowledgment mode is used, a client may build up a
+ * large number of unacknowledged messages while attempting to process
+ * them. A JMS provider should provide administrators with a way to
+ * limit client overrun so that clients are not driven to resource
+ * exhaustion and ensuing failure when some resource they are using
+ * is temporarily blocked.
+ *
+ * @see javax.jms.Message#acknowledge()
+ */
+
+ static final int CLIENT_ACKNOWLEDGE = 2;
+
+ /** This acknowledgment mode instructs the session to lazily acknowledge
+ * the delivery of messages. This is likely to result in the delivery of
+ * some duplicate messages if the JMS provider fails, so it should only be
+ * used by consumers that can tolerate duplicate messages. Use of this
+ * mode can reduce session overhead by minimizing the work the
+ * session does to prevent duplicates.
+ */
+
+ static final int DUPS_OK_ACKNOWLEDGE = 3;
+
+ /** This value is returned from the method
+ * <CODE>getAcknowledgeMode</CODE> if the session is transacted.
+ * If a <CODE>Session</CODE> is transacted, the acknowledgement mode
+ * is ignored.
+ */
+ static final int SESSION_TRANSACTED = 0;
+
+ /** Creates a <CODE>BytesMessage</CODE> object. A <CODE>BytesMessage</CODE>
+ * object is used to send a message containing a stream of uninterpreted
+ * bytes.
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+
+ BytesMessage
+ createBytesMessage() throws JMSException;
+
+
+ /** Creates a <CODE>MapMessage</CODE> object. A <CODE>MapMessage</CODE>
+ * object is used to send a self-defining set of name-value pairs, where
+ * names are <CODE>String</CODE> objects and values are primitive values
+ * in the Java programming language.
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ MapMessage
+ createMapMessage() throws JMSException;
+
+
+ /** Creates a <CODE>Message</CODE> object. The <CODE>Message</CODE>
+ * interface is the root interface of all JMS messages. A
+ * <CODE>Message</CODE> object holds all the
+ * standard message header information. It can be sent when a message
+ * containing only header information is sufficient.
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ Message
+ createMessage() throws JMSException;
+
+
+ /** Creates an <CODE>ObjectMessage</CODE> object. An
+ * <CODE>ObjectMessage</CODE> object is used to send a message
+ * that contains a serializable Java object.
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ ObjectMessage
+ createObjectMessage() throws JMSException;
+
+
+ /** Creates an initialized <CODE>ObjectMessage</CODE> object. An
+ * <CODE>ObjectMessage</CODE> object is used
+ * to send a message that contains a serializable Java object.
+ *
+ * @param object the object to use to initialize this message
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ ObjectMessage
+ createObjectMessage(Serializable object) throws JMSException;
+
+
+ /** Creates a <CODE>StreamMessage</CODE> object. A
+ * <CODE>StreamMessage</CODE> object is used to send a
+ * self-defining stream of primitive values in the Java programming
+ * language.
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ StreamMessage
+ createStreamMessage() throws JMSException;
+
+
+ /** Creates a <CODE>TextMessage</CODE> object. A <CODE>TextMessage</CODE>
+ * object is used to send a message containing a <CODE>String</CODE>
+ * object.
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ TextMessage
+ createTextMessage() throws JMSException;
+
+
+ /** Creates an initialized <CODE>TextMessage</CODE> object. A
+ * <CODE>TextMessage</CODE> object is used to send
+ * a message containing a <CODE>String</CODE>.
+ *
+ * @param text the string used to initialize this message
+ *
+ * @exception JMSException if the JMS provider fails to create this message
+ * due to some internal error.
+ */
+
+ TextMessage
+ createTextMessage(String text) throws JMSException;
+
+
+ /** Indicates whether the session is in transacted mode.
+ *
+ * @return true if the session is in transacted mode
+ *
+ * @exception JMSException if the JMS provider fails to return the
+ * transaction mode due to some internal error.
+ */
+
+ boolean
+ getTransacted() throws JMSException;
+
+ /** Returns the acknowledgement mode of the session. The acknowledgement
+ * mode is set at the time that the session is created. If the session is
+ * transacted, the acknowledgement mode is ignored.
+ *
+ *@return If the session is not transacted, returns the
+ * current acknowledgement mode for the session.
+ * If the session
+ * is transacted, returns SESSION_TRANSACTED.
+ *
+ *@exception JMSException if the JMS provider fails to return the
+ * acknowledgment mode due to some internal error.
+ *
+ *@see Connection#createSession
+ *@since 1.1
+ */
+ int
+ getAcknowledgeMode() throws JMSException;
+
+
+ /** Commits all messages done in this transaction and releases any locks
+ * currently held.
+ *
+ * @exception JMSException if the JMS provider fails to commit the
+ * transaction due to some internal error.
+ * @exception TransactionRolledBackException if the transaction
+ * is rolled back due to some internal error
+ * during commit.
+ * @exception IllegalStateException if the method is not called by a
+ * transacted session.
+ */
+
+ void
+ commit() throws JMSException;
+
+
+ /** Rolls back any messages done in this transaction and releases any locks
+ * currently held.
+ *
+ * @exception JMSException if the JMS provider fails to roll back the
+ * transaction due to some internal error.
+ * @exception IllegalStateException if the method is not called by a
+ * transacted session.
+ *
+ */
+
+ void
+ rollback() throws JMSException;
+
+
+ /** Closes the session.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a session
+ * outside the JVM, clients should close the resources when they are not
+ * needed.
+ * Relying on garbage collection to eventually reclaim these resources
+ * may not be timely enough.
+ *
+ * <P>There is no need to close the producers and consumers
+ * of a closed session.
+ *
+ * <P> This call will block until a <CODE>receive</CODE> call or message
+ * listener in progress has completed. A blocked message consumer
+ * <CODE>receive</CODE> call returns <CODE>null</CODE> when this session
+ * is closed.
+ *
+ * <P>Closing a transacted session must roll back the transaction
+ * in progress.
+ *
+ * <P>This method is the only <CODE>Session</CODE> method that can
+ * be called concurrently.
+ *
+ * <P>Invoking any other <CODE>Session</CODE> method on a closed session
+ * must throw a <CODE>JMSException.IllegalStateException</CODE>. Closing a
+ * closed session must <I>not</I> throw an exception.
+ *
+ * @exception JMSException if the JMS provider fails to close the
+ * session due to some internal error.
+ */
+
+ void
+ close() throws JMSException;
+
+
+ /** Stops message delivery in this session, and restarts message delivery
+ * with the oldest unacknowledged message.
+ *
+ * <P>All consumers deliver messages in a serial order.
+ * Acknowledging a received message automatically acknowledges all
+ * messages that have been delivered to the client.
+ *
+ * <P>Restarting a session causes it to take the following actions:
+ *
+ * <UL>
+ * <LI>Stop message delivery
+ * <LI>Mark all messages that might have been delivered but not
+ * acknowledged as "redelivered"
+ * <LI>Restart the delivery sequence including all unacknowledged
+ * messages that had been previously delivered. Redelivered messages
+ * do not have to be delivered in
+ * exactly their original delivery order.
+ * </UL>
+ *
+ * @exception JMSException if the JMS provider fails to stop and restart
+ * message delivery due to some internal error.
+ * @exception IllegalStateException if the method is called by a
+ * transacted session.
+ */
+
+ void
+ recover() throws JMSException;
+
+
+ /** Returns the session's distinguished message listener (optional).
+ *
+ * @return the message listener associated with this session
+ *
+ * @exception JMSException if the JMS provider fails to get the message
+ * listener due to an internal error.
+ *
+ * @see javax.jms.Session#setMessageListener
+ * @see javax.jms.ServerSessionPool
+ * @see javax.jms.ServerSession
+ */
+
+ MessageListener
+ getMessageListener() throws JMSException;
+
+
+ /** Sets the session's distinguished message listener (optional).
+ *
+ * <P>When the distinguished message listener is set, no other form of
+ * message receipt in the session can
+ * be used; however, all forms of sending messages are still supported.
+ *
+ * <P>This is an expert facility not used by regular JMS clients.
+ *
+ * @param listener the message listener to associate with this session
+ *
+ * @exception JMSException if the JMS provider fails to set the message
+ * listener due to an internal error.
+ *
+ * @see javax.jms.Session#getMessageListener
+ * @see javax.jms.ServerSessionPool
+ * @see javax.jms.ServerSession
+ */
+
+ void
+ setMessageListener(MessageListener listener) throws JMSException;
+
+ /**
+ * Optional operation, intended to be used only by Application Servers,
+ * not by ordinary JMS clients.
+ *
+ * @see javax.jms.ServerSession
+ */
+ public void run();
+
+ /** Creates a <CODE>MessageProducer</CODE> to send messages to the specified
+ * destination.
+ *
+ * <P>A client uses a <CODE>MessageProducer</CODE> object to send
+ * messages to a destination. Since <CODE>Queue</CODE> and <CODE>Topic</CODE>
+ * both inherit from <CODE>Destination</CODE>, they can be used in
+ * the destination parameter to create a <CODE>MessageProducer</CODE> object.
+ *
+ * @param destination the <CODE>Destination</CODE> to send to,
+ * or null if this is a producer which does not have a specified
+ * destination.
+ *
+ * @exception JMSException if the session fails to create a MessageProducer
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified.
+ *
+ * @since 1.1
+ *
+ */
+
+ MessageProducer
+ createProducer(Destination destination) throws JMSException;
+
+
+ /** Creates a <CODE>MessageConsumer</CODE> for the specified destination.
+ * Since <CODE>Queue</CODE> and <CODE>Topic</CODE>
+ * both inherit from <CODE>Destination</CODE>, they can be used in
+ * the destination parameter to create a <CODE>MessageConsumer</CODE>.
+ *
+ * @param destination the <CODE>Destination</CODE> to access.
+ *
+ * @exception JMSException if the session fails to create a consumer
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified.
+ *
+ * @since 1.1
+ */
+
+ MessageConsumer
+ createConsumer(Destination destination) throws JMSException;
+
+ /** Creates a <CODE>MessageConsumer</CODE> for the specified destination,
+ * using a message selector.
+ * Since <CODE>Queue</CODE> and <CODE>Topic</CODE>
+ * both inherit from <CODE>Destination</CODE>, they can be used in
+ * the destination parameter to create a <CODE>MessageConsumer</CODE>.
+ *
+ * <P>A client uses a <CODE>MessageConsumer</CODE> object to receive
+ * messages that have been sent to a destination.
+ *
+ *
+ * @param destination the <CODE>Destination</CODE> to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ *
+ *
+ * @exception JMSException if the session fails to create a MessageConsumer
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified.
+
+ * @exception InvalidSelectorException if the message selector is invalid.
+ *
+ * @since 1.1
+ */
+ MessageConsumer
+ createConsumer(Destination destination, java.lang.String messageSelector)
+ throws JMSException;
+
+
+ /** Creates <CODE>MessageConsumer</CODE> for the specified destination, using a
+ * message selector. This method can specify whether messages published by
+ * its own connection should be delivered to it, if the destination is a
+ * topic.
+ *<P> Since <CODE>Queue</CODE> and <CODE>Topic</CODE>
+ * both inherit from <CODE>Destination</CODE>, they can be used in
+ * the destination parameter to create a <CODE>MessageConsumer</CODE>.
+ * <P>A client uses a <CODE>MessageConsumer</CODE> object to receive
+ * messages that have been published to a destination.
+ *
+ * <P>In some cases, a connection may both publish and subscribe to a
+ * topic. The consumer <CODE>NoLocal</CODE> attribute allows a consumer
+ * to inhibit the delivery of messages published by its own connection.
+ * The default value for this attribute is False. The <CODE>noLocal</CODE>
+ * value must be supported by destinations that are topics.
+ *
+ * @param destination the <CODE>Destination</CODE> to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param NoLocal - if true, and the destination is a topic,
+ * inhibits the delivery of messages published
+ * by its own connection. The behavior for
+ * <CODE>NoLocal</CODE> is
+ * not specified if the destination is a queue.
+ *
+ * @exception JMSException if the session fails to create a MessageConsumer
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified.
+
+ * @exception InvalidSelectorException if the message selector is invalid.
+ *
+ * @since 1.1
+ *
+ */
+ MessageConsumer
+ createConsumer(Destination destination, java.lang.String messageSelector,
+ boolean NoLocal) throws JMSException;
+
+
+ /** Creates a queue identity given a <CODE>Queue</CODE> name.
+ *
+ * <P>This facility is provided for the rare cases where clients need to
+ * dynamically manipulate queue identity. It allows the creation of a
+ * queue identity with a provider-specific name. Clients that depend
+ * on this ability are not portable.
+ *
+ * <P>Note that this method is not for creating the physical queue.
+ * The physical creation of queues is an administrative task and is not
+ * to be initiated by the JMS API. The one exception is the
+ * creation of temporary queues, which is accomplished with the
+ * <CODE>createTemporaryQueue</CODE> method.
+ *
+ * @param queueName the name of this <CODE>Queue</CODE>
+ *
+ * @return a <CODE>Queue</CODE> with the given name
+ *
+ * @exception JMSException if the session fails to create a queue
+ * due to some internal error.
+ * @since 1.1
+ */
+
+ Queue
+ createQueue(String queueName) throws JMSException;
+
+ /** Creates a topic identity given a <CODE>Topic</CODE> name.
+ *
+ * <P>This facility is provided for the rare cases where clients need to
+ * dynamically manipulate topic identity. This allows the creation of a
+ * topic identity with a provider-specific name. Clients that depend
+ * on this ability are not portable.
+ *
+ * <P>Note that this method is not for creating the physical topic.
+ * The physical creation of topics is an administrative task and is not
+ * to be initiated by the JMS API. The one exception is the
+ * creation of temporary topics, which is accomplished with the
+ * <CODE>createTemporaryTopic</CODE> method.
+ *
+ * @param topicName the name of this <CODE>Topic</CODE>
+ *
+ * @return a <CODE>Topic</CODE> with the given name
+ *
+ * @exception JMSException if the session fails to create a topic
+ * due to some internal error.
+ * @since 1.1
+ */
+
+ Topic
+ createTopic(String topicName) throws JMSException;
+
+ /** Creates a <CODE>QueueBrowser</CODE> object to peek at the messages on
+ * the specified queue.
+ *
+ * @param queue the <CODE>queue</CODE> to access
+ *
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified
+ *
+ * @since 1.1
+ */
+
+
+ /** Creates a durable subscriber to the specified topic.
+ *
+ * <P>If a client needs to receive all the messages published on a
+ * topic, including the ones published while the subscriber is inactive,
+ * it uses a durable <CODE>TopicSubscriber</CODE>. The JMS provider
+ * retains a record of this
+ * durable subscription and insures that all messages from the topic's
+ * publishers are retained until they are acknowledged by this
+ * durable subscriber or they have expired.
+ *
+ * <P>Sessions with durable subscribers must always provide the same
+ * client identifier. In addition, each client must specify a name that
+ * uniquely identifies (within client identifier) each durable
+ * subscription it creates. Only one session at a time can have a
+ * <CODE>TopicSubscriber</CODE> for a particular durable subscription.
+ *
+ * <P>A client can change an existing durable subscription by creating
+ * a durable <CODE>TopicSubscriber</CODE> with the same name and a new
+ * topic and/or
+ * message selector. Changing a durable subscriber is equivalent to
+ * unsubscribing (deleting) the old one and creating a new one.
+ *
+ * <P>In some cases, a connection may both publish and subscribe to a
+ * topic. The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber
+ * to inhibit the delivery of messages published by its own connection.
+ * The default value for this attribute is false.
+ *
+ * @param topic the non-temporary <CODE>Topic</CODE> to subscribe to
+ * @param name the name used to identify this subscription
+ *
+ * @exception JMSException if the session fails to create a subscriber
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ *
+ * @since 1.1
+ */
+
+ TopicSubscriber
+ createDurableSubscriber(Topic topic,
+ String name) throws JMSException;
+
+
+ /** Creates a durable subscriber to the specified topic, using a
+ * message selector and specifying whether messages published by its
+ * own connection should be delivered to it.
+ *
+ * <P>If a client needs to receive all the messages published on a
+ * topic, including the ones published while the subscriber is inactive,
+ * it uses a durable <CODE>TopicSubscriber</CODE>. The JMS provider
+ * retains a record of this
+ * durable subscription and insures that all messages from the topic's
+ * publishers are retained until they are acknowledged by this
+ * durable subscriber or they have expired.
+ *
+ * <P>Sessions with durable subscribers must always provide the same
+ * client identifier. In addition, each client must specify a name which
+ * uniquely identifies (within client identifier) each durable
+ * subscription it creates. Only one session at a time can have a
+ * <CODE>TopicSubscriber</CODE> for a particular durable subscription.
+ * An inactive durable subscriber is one that exists but
+ * does not currently have a message consumer associated with it.
+ *
+ * <P>A client can change an existing durable subscription by creating
+ * a durable <CODE>TopicSubscriber</CODE> with the same name and a new
+ * topic and/or
+ * message selector. Changing a durable subscriber is equivalent to
+ * unsubscribing (deleting) the old one and creating a new one.
+ *
+ * @param topic the non-temporary <CODE>Topic</CODE> to subscribe to
+ * @param name the name used to identify this subscription
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param noLocal if set, inhibits the delivery of messages published
+ * by its own connection
+ *
+ * @exception JMSException if the session fails to create a subscriber
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ *
+ * @since 1.1
+ */
+
+ TopicSubscriber
+ createDurableSubscriber(Topic topic,
+ String name,
+ String messageSelector,
+ boolean noLocal) throws JMSException;
+
+ /** Creates a <CODE>QueueBrowser</CODE> object to peek at the messages on
+ * the specified queue.
+ *
+ * @param queue the <CODE>queue</CODE> to access
+ *
+ *
+ * @exception JMSException if the session fails to create a browser
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified
+ *
+ * @since 1.1
+ */
+ QueueBrowser
+ createBrowser(Queue queue) throws JMSException;
+
+
+ /** Creates a <CODE>QueueBrowser</CODE> object to peek at the messages on
+ * the specified queue using a message selector.
+ *
+ * @param queue the <CODE>queue</CODE> to access
+ *
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ *
+ * @exception JMSException if the session fails to create a browser
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid destination
+ * is specified
+ * @exception InvalidSelectorException if the message selector is invalid.
+ *
+ * @since 1.1
+ */
+
+ QueueBrowser
+ createBrowser(Queue queue,
+ String messageSelector) throws JMSException;
+
+
+ /** Creates a <CODE>TemporaryQueue</CODE> object. Its lifetime will be that
+ * of the <CODE>Connection</CODE> unless it is deleted earlier.
+ *
+ * @return a temporary queue identity
+ *
+ * @exception JMSException if the session fails to create a temporary queue
+ * due to some internal error.
+ *
+ *@since 1.1
+ */
+
+ TemporaryQueue
+ createTemporaryQueue() throws JMSException;
+
+
+ /** Creates a <CODE>TemporaryTopic</CODE> object. Its lifetime will be that
+ * of the <CODE>Connection</CODE> unless it is deleted earlier.
+ *
+ * @return a temporary topic identity
+ *
+ * @exception JMSException if the session fails to create a temporary
+ * topic due to some internal error.
+ *
+ * @since 1.1
+ */
+
+ TemporaryTopic
+ createTemporaryTopic() throws JMSException;
+
+
+ /** Unsubscribes a durable subscription that has been created by a client.
+ *
+ * <P>This method deletes the state being maintained on behalf of the
+ * subscriber by its provider.
+ *
+ * <P>It is erroneous for a client to delete a durable subscription
+ * while there is an active <CODE>MessageConsumer</CODE>
+ * or <CODE>TopicSubscriber</CODE> for the
+ * subscription, or while a consumed message is part of a pending
+ * transaction or has not been acknowledged in the session.
+ *
+ * @param name the name used to identify this subscription
+ *
+ * @exception JMSException if the session fails to unsubscribe to the
+ * durable subscription due to some internal error.
+ * @exception InvalidDestinationException if an invalid subscription name
+ * is specified.
+ *
+ * @since 1.1
+ */
+
+ void
+ unsubscribe(String name) throws JMSException;
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/StreamMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/StreamMessage.java
new file mode 100644
index 0000000000..d3de3eeb0d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/StreamMessage.java
@@ -0,0 +1,550 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>StreamMessage</CODE> object is used to send a stream of primitive
+ * types in the Java programming language. It is filled and read sequentially.
+ * It inherits from the <CODE>Message</CODE> interface
+ * and adds a stream message body. Its methods are based largely on those
+ * found in <CODE>java.io.DataInputStream</CODE> and
+ * <CODE>java.io.DataOutputStream</CODE>.
+ *
+ * <P>The primitive types can be read or written explicitly using methods
+ * for each type. They may also be read or written generically as objects.
+ * For instance, a call to <CODE>StreamMessage.writeInt(6)</CODE> is
+ * equivalent to <CODE>StreamMessage.writeObject(new Integer(6))</CODE>.
+ * Both forms are provided, because the explicit form is convenient for
+ * static programming, and the object form is needed when types are not known
+ * at compile time.
+ *
+ * <P>When the message is first created, and when <CODE>clearBody</CODE>
+ * is called, the body of the message is in write-only mode. After the
+ * first call to <CODE>reset</CODE> has been made, the message body is in
+ * read-only mode.
+ * After a message has been sent, the client that sent it can retain and
+ * modify it without affecting the message that has been sent. The same message
+ * object can be sent multiple times.
+ * When a message has been received, the provider has called
+ * <CODE>reset</CODE> so that the message body is in read-only mode for the client.
+ *
+ * <P>If <CODE>clearBody</CODE> is called on a message in read-only mode,
+ * the message body is cleared and the message body is in write-only mode.
+ *
+ * <P>If a client attempts to read a message in write-only mode, a
+ * <CODE>MessageNotReadableException</CODE> is thrown.
+ *
+ * <P>If a client attempts to write a message in read-only mode, a
+ * <CODE>MessageNotWriteableException</CODE> is thrown.
+ *
+ * <P><CODE>StreamMessage</CODE> objects support the following conversion
+ * table. The marked cases must be supported. The unmarked cases must throw a
+ * <CODE>JMSException</CODE>. The <CODE>String</CODE>-to-primitive conversions
+ * may throw a runtime exception if the primitive's <CODE>valueOf()</CODE>
+ * method does not accept it as a valid <CODE>String</CODE> representation of
+ * the primitive.
+ *
+ * <P>A value written as the row type can be read as the column type.
+ *
+ * <PRE>
+ * | | boolean byte short char int long float double String byte[]
+ * |----------------------------------------------------------------------
+ * |boolean | X X
+ * |byte | X X X X X
+ * |short | X X X X
+ * |char | X X
+ * |int | X X X
+ * |long | X X
+ * |float | X X X
+ * |double | X X
+ * |String | X X X X X X X X
+ * |byte[] | X
+ * |----------------------------------------------------------------------
+ * </PRE>
+ *
+ * <P>Attempting to read a null value as a primitive type must be treated
+ * as calling the primitive's corresponding <code>valueOf(String)</code>
+ * conversion method with a null value. Since <code>char</code> does not
+ * support a <code>String</code> conversion, attempting to read a null value
+ * as a <code>char</code> must throw a <code>NullPointerException</code>.
+ *
+ * @version 1.0 - 6 August 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.Session#createStreamMessage()
+ * @see javax.jms.BytesMessage
+ * @see javax.jms.MapMessage
+ * @see javax.jms.Message
+ * @see javax.jms.ObjectMessage
+ * @see javax.jms.TextMessage
+ */
+
+public interface StreamMessage extends Message {
+
+
+ /** Reads a <code>boolean</code> from the stream message.
+ *
+ * @return the <code>boolean</code> value read
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ boolean
+ readBoolean() throws JMSException;
+
+
+ /** Reads a <code>byte</code> value from the stream message.
+ *
+ * @return the next byte from the stream message as a 8-bit
+ * <code>byte</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ byte
+ readByte() throws JMSException;
+
+
+ /** Reads a 16-bit integer from the stream message.
+ *
+ * @return a 16-bit integer from the stream message
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ short
+ readShort() throws JMSException;
+
+
+ /** Reads a Unicode character value from the stream message.
+ *
+ * @return a Unicode character from the stream message
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ char
+ readChar() throws JMSException;
+
+
+ /** Reads a 32-bit integer from the stream message.
+ *
+ * @return a 32-bit integer value from the stream message, interpreted
+ * as an <code>int</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ int
+ readInt() throws JMSException;
+
+
+ /** Reads a 64-bit integer from the stream message.
+ *
+ * @return a 64-bit integer value from the stream message, interpreted as
+ * a <code>long</code>
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ long
+ readLong() throws JMSException;
+
+
+ /** Reads a <code>float</code> from the stream message.
+ *
+ * @return a <code>float</code> value from the stream message
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ float
+ readFloat() throws JMSException;
+
+
+ /** Reads a <code>double</code> from the stream message.
+ *
+ * @return a <code>double</code> value from the stream message
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ double
+ readDouble() throws JMSException;
+
+
+ /** Reads a <CODE>String</CODE> from the stream message.
+ *
+ * @return a Unicode string from the stream message
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ */
+
+ String
+ readString() throws JMSException;
+
+
+ /** Reads a byte array field from the stream message into the
+ * specified <CODE>byte[]</CODE> object (the read buffer).
+ *
+ * <P>To read the field value, <CODE>readBytes</CODE> should be
+ * successively called
+ * until it returns a value less than the length of the read buffer.
+ * The value of the bytes in the buffer following the last byte
+ * read is undefined.
+ *
+ * <P>If <CODE>readBytes</CODE> returns a value equal to the length of the
+ * buffer, a subsequent <CODE>readBytes</CODE> call must be made. If there
+ * are no more bytes to be read, this call returns -1.
+ *
+ * <P>If the byte array field value is null, <CODE>readBytes</CODE>
+ * returns -1.
+ *
+ * <P>If the byte array field value is empty, <CODE>readBytes</CODE>
+ * returns 0.
+ *
+ * <P>Once the first <CODE>readBytes</CODE> call on a <CODE>byte[]</CODE>
+ * field value has been made,
+ * the full value of the field must be read before it is valid to read
+ * the next field. An attempt to read the next field before that has
+ * been done will throw a <CODE>MessageFormatException</CODE>.
+ *
+ * <P>To read the byte field value into a new <CODE>byte[]</CODE> object,
+ * use the <CODE>readObject</CODE> method.
+ *
+ * @param value the buffer into which the data is read
+ *
+ * @return the total number of bytes read into the buffer, or -1 if
+ * there is no more data because the end of the byte field has been
+ * reached
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ *
+ * @see #readObject()
+ */
+
+ int
+ readBytes(byte[] value) throws JMSException;
+
+
+ /** Reads an object from the stream message.
+ *
+ * <P>This method can be used to return, in objectified format,
+ * an object in the Java programming language ("Java object") that has
+ * been written to the stream with the equivalent
+ * <CODE>writeObject</CODE> method call, or its equivalent primitive
+ * <CODE>write<I>type</I></CODE> method.
+ *
+ * <P>Note that byte values are returned as <CODE>byte[]</CODE>, not
+ * <CODE>Byte[]</CODE>.
+ *
+ * <P>An attempt to call <CODE>readObject</CODE> to read a byte field
+ * value into a new <CODE>byte[]</CODE> object before the full value of the
+ * byte field has been read will throw a
+ * <CODE>MessageFormatException</CODE>.
+ *
+ * @return a Java object from the stream message, in objectified
+ * format (for example, if the object was written as an <CODE>int</CODE>,
+ * an <CODE>Integer</CODE> is returned)
+ *
+ * @exception JMSException if the JMS provider fails to read the message
+ * due to some internal error.
+ * @exception MessageEOFException if unexpected end of message stream has
+ * been reached.
+ * @exception MessageFormatException if this type conversion is invalid.
+ * @exception MessageNotReadableException if the message is in write-only
+ * mode.
+ *
+ * @see #readBytes(byte[] value)
+ */
+
+ Object
+ readObject() throws JMSException;
+
+
+
+ /** Writes a <code>boolean</code> to the stream message.
+ * The value <code>true</code> is written as the value
+ * <code>(byte)1</code>; the value <code>false</code> is written as
+ * the value <code>(byte)0</code>.
+ *
+ * @param value the <code>boolean</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeBoolean(boolean value)
+ throws JMSException;
+
+
+ /** Writes a <code>byte</code> to the stream message.
+ *
+ * @param value the <code>byte</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeByte(byte value) throws JMSException;
+
+
+ /** Writes a <code>short</code> to the stream message.
+ *
+ * @param value the <code>short</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeShort(short value) throws JMSException;
+
+
+ /** Writes a <code>char</code> to the stream message.
+ *
+ * @param value the <code>char</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeChar(char value) throws JMSException;
+
+
+ /** Writes an <code>int</code> to the stream message.
+ *
+ * @param value the <code>int</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeInt(int value) throws JMSException;
+
+
+ /** Writes a <code>long</code> to the stream message.
+ *
+ * @param value the <code>long</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeLong(long value) throws JMSException;
+
+
+ /** Writes a <code>float</code> to the stream message.
+ *
+ * @param value the <code>float</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeFloat(float value) throws JMSException;
+
+
+ /** Writes a <code>double</code> to the stream message.
+ *
+ * @param value the <code>double</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeDouble(double value) throws JMSException;
+
+
+ /** Writes a <code>String</code> to the stream message.
+ *
+ * @param value the <code>String</code> value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeString(String value) throws JMSException;
+
+
+ /** Writes a byte array field to the stream message.
+ *
+ * <P>The byte array <code>value</code> is written to the message
+ * as a byte array field. Consecutively written byte array fields are
+ * treated as two distinct fields when the fields are read.
+ *
+ * @param value the byte array value to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeBytes(byte[] value) throws JMSException;
+
+
+ /** Writes a portion of a byte array as a byte array field to the stream
+ * message.
+ *
+ * <P>The a portion of the byte array <code>value</code> is written to the
+ * message as a byte array field. Consecutively written byte
+ * array fields are treated as two distinct fields when the fields are
+ * read.
+ *
+ * @param value the byte array value to be written
+ * @param offset the initial offset within the byte array
+ * @param length the number of bytes to use
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeBytes(byte[] value, int offset, int length)
+ throws JMSException;
+
+
+ /** Writes an object to the stream message.
+ *
+ * <P>This method works only for the objectified primitive
+ * object types (<code>Integer</code>, <code>Double</code>,
+ * <code>Long</code>&nbsp;...), <code>String</code> objects, and byte
+ * arrays.
+ *
+ * @param value the Java object to be written
+ *
+ * @exception JMSException if the JMS provider fails to write the message
+ * due to some internal error.
+ * @exception MessageFormatException if the object is invalid.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ writeObject(Object value) throws JMSException;
+
+
+ /** Puts the message body in read-only mode and repositions the stream
+ * to the beginning.
+ *
+ * @exception JMSException if the JMS provider fails to reset the message
+ * due to some internal error.
+ * @exception MessageFormatException if the message has an invalid
+ * format.
+ */
+
+ void
+ reset() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryQueue.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryQueue.java
new file mode 100644
index 0000000000..1de79ef678
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryQueue.java
@@ -0,0 +1,58 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** A <CODE>TemporaryQueue</CODE> object is a unique <CODE>Queue</CODE> object
+ * created for the duration of a <CODE>Connection</CODE>. It is a
+ * system-defined queue that can be consumed only by the
+ * <CODE>Connection</CODE> that created it.
+ *
+ *<P>A <CODE>TemporaryQueue</CODE> object can be created at either the
+ * <CODE>Session</CODE> or <CODE>QueueSession</CODE> level. Creating it at the
+ * <CODE>Session</CODE> level allows to the <CODE>TemporaryQueue</CODE> to
+ * participate in transactions with objects from the Pub/Sub domain.
+ * If it is created at the <CODE>QueueSession</CODE>, it will only
+ * be able participate in transactions with objects from the PTP domain.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see Session#createTemporaryQueue()
+ * @see QueueSession#createTemporaryQueue()
+ */
+
+public interface TemporaryQueue extends Queue {
+
+ /** Deletes this temporary queue. If there are existing receivers
+ * still using it, a <CODE>JMSException</CODE> will be thrown.
+ *
+ * @exception JMSException if the JMS provider fails to delete the
+ * temporary queue due to some internal error.
+ */
+
+ void
+ delete() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryTopic.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryTopic.java
new file mode 100644
index 0000000000..cf56d565f6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TemporaryTopic.java
@@ -0,0 +1,60 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>TemporaryTopic</CODE> object is a unique <CODE>Topic</CODE> object
+ * created for the duration of a <CODE>Connection</CODE>. It is a
+ * system-defined topic that can be consumed only by the
+ * <CODE>Connection</CODE> that created it.
+ *
+ *<P>A <CODE>TemporaryTopic</CODE> object can be created either at the
+ * <CODE>Session</CODE> or <CODE>TopicSession</CODE> level. Creating it at the
+ * <CODE>Session</CODE> level allows the <CODE>TemporaryTopic</CODE> to participate
+ * in the same transaction with objects from the PTP domain.
+ * If a <CODE>TemporaryTopic</CODE> is created at the
+ * <CODE>TopicSession</CODE>, it will only
+ * be able participate in transactions with objects from the Pub/Sub domain.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see Session#createTemporaryTopic()
+ * @see TopicSession#createTemporaryTopic()
+ */
+
+public interface TemporaryTopic extends Topic {
+
+ /** Deletes this temporary topic. If there are existing subscribers
+ * still using it, a <CODE>JMSException</CODE> will be thrown.
+ *
+ * @exception JMSException if the JMS provider fails to delete the
+ * temporary topic due to some internal error.
+ */
+
+ void
+ delete() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TextMessage.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TextMessage.java
new file mode 100644
index 0000000000..0ee45a0df1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TextMessage.java
@@ -0,0 +1,82 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** A <CODE>TextMessage</CODE> object is used to send a message containing a
+ * <CODE>java.lang.String</CODE>.
+ * It inherits from the <CODE>Message</CODE> interface and adds a text message
+ * body.
+ *
+ * <P>This message type can be used to transport text-based messages, including
+ * those with XML content.
+ *
+ * <P>When a client receives a <CODE>TextMessage</CODE>, it is in read-only
+ * mode. If a client attempts to write to the message at this point, a
+ * <CODE>MessageNotWriteableException</CODE> is thrown. If
+ * <CODE>clearBody</CODE> is
+ * called, the message can now be both read from and written to.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session#createTextMessage()
+ * @see javax.jms.Session#createTextMessage(String)
+ * @see javax.jms.BytesMessage
+ * @see javax.jms.MapMessage
+ * @see javax.jms.Message
+ * @see javax.jms.ObjectMessage
+ * @see javax.jms.StreamMessage
+ * @see java.lang.String
+ */
+
+public interface TextMessage extends Message {
+
+ /** Sets the string containing this message's data.
+ *
+ * @param string the <CODE>String</CODE> containing the message's data
+ *
+ * @exception JMSException if the JMS provider fails to set the text due to
+ * some internal error.
+ * @exception MessageNotWriteableException if the message is in read-only
+ * mode.
+ */
+
+ void
+ setText(String string) throws JMSException;
+
+
+ /** Gets the string containing this message's data. The default
+ * value is null.
+ *
+ * @return the <CODE>String</CODE> containing the message's data
+ *
+ * @exception JMSException if the JMS provider fails to get the text due to
+ * some internal error.
+ */
+
+ String
+ getText() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Topic.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Topic.java
new file mode 100644
index 0000000000..37db768ce5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/Topic.java
@@ -0,0 +1,90 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+
+/** A <CODE>Topic</CODE> object encapsulates a provider-specific topic name.
+ * It is the way a client specifies the identity of a topic to JMS API methods.
+ * For those methods that use a <CODE>Destination</CODE> as a parameter, a
+ * <CODE>Topic</CODE> object may used as an argument . For
+ * example, a Topic can be used to create a <CODE>MessageConsumer</CODE>
+ * and a <CODE>MessageProducer</CODE>
+ * by calling:
+ *<UL>
+ *<LI> <CODE>Session.CreateConsumer(Destination destination)</CODE>
+ *<LI> <CODE>Session.CreateProducer(Destination destination)</CODE>
+ *
+ *</UL>
+ *
+ * <P>Many publish/subscribe (pub/sub) providers group topics into hierarchies
+ * and provide various options for subscribing to parts of the hierarchy. The
+ * JMS API places no restriction on what a <CODE>Topic</CODE> object
+ * represents. It may be a leaf in a topic hierarchy, or it may be a larger
+ * part of the hierarchy.
+ *
+ * <P>The organization of topics and the granularity of subscriptions to
+ * them is an important part of a pub/sub application's architecture. The JMS
+ * API
+ * does not specify a policy for how this should be done. If an application
+ * takes advantage of a provider-specific topic-grouping mechanism, it
+ * should document this. If the application is installed using a different
+ * provider, it is the job of the administrator to construct an equivalent
+ * topic architecture and create equivalent <CODE>Topic</CODE> objects.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see Session#createConsumer(Destination)
+ * @see Session#createProducer(Destination)
+ * @see javax.jms.TopicSession#createTopic(String)
+ */
+
+public interface Topic extends Destination {
+
+ /** Gets the name of this topic.
+ *
+ * <P>Clients that depend upon the name are not portable.
+ *
+ * @return the topic name
+ *
+ * @exception JMSException if the JMS provider implementation of
+ * <CODE>Topic</CODE> fails to return the topic
+ * name due to some internal
+ * error.
+ */
+
+ String
+ getTopicName() throws JMSException;
+
+
+ /** Returns a string representation of this object.
+ *
+ * @return the provider-specific identity values for this topic
+ */
+
+ String
+ toString();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnection.java
new file mode 100644
index 0000000000..15d9a9f605
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnection.java
@@ -0,0 +1,146 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>TopicConnection</CODE> object is an active connection to a
+ * publish/subscribe JMS provider. A client uses a <CODE>TopicConnection</CODE>
+ * object to create one or more <CODE>TopicSession</CODE> objects
+ * for producing and consuming messages.
+ *
+ *<P>A <CODE>TopicConnection</CODE> can be used to create a
+ *<CODE>TopicSession</CODE>, from which
+ * specialized topic-related objects can be created.
+ * A more general, and recommended approach is to use the
+ * <CODE>Connection</CODE> object.
+ *
+ *
+ * <P>The <CODE>TopicConnection</CODE> object
+ * should be used to support existing code.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Connection
+ * @see javax.jms.ConnectionFactory
+ * @see javax.jms.TopicConnectionFactory
+ */
+
+public interface TopicConnection extends Connection {
+
+ /** Creates a <CODE>TopicSession</CODE> object.
+ *
+ * @param transacted indicates whether the session is transacted
+ * @param acknowledgeMode indicates whether the consumer or the
+ * client will acknowledge any messages it receives; ignored if the session
+ * is transacted. Legal values are <code>Session.AUTO_ACKNOWLEDGE</code>,
+ * <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+ * <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+ *
+ * @return a newly created topic session
+ *
+ * @exception JMSException if the <CODE>TopicConnection</CODE> object fails
+ * to create a session due to some internal error or
+ * lack of support for the specific transaction
+ * and acknowledgement mode.
+ *
+ * @see Session#AUTO_ACKNOWLEDGE
+ * @see Session#CLIENT_ACKNOWLEDGE
+ * @see Session#DUPS_OK_ACKNOWLEDGE
+ */
+
+ TopicSession
+ createTopicSession(boolean transacted,
+ int acknowledgeMode) throws JMSException;
+
+
+ /** Creates a connection consumer for this connection (optional operation).
+ * This is an expert facility not used by regular JMS clients.
+ *
+ * @param topic the topic to access
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param sessionPool the server session pool to associate with this
+ * connection consumer
+ * @param maxMessages the maximum number of messages that can be
+ * assigned to a server session at one time
+ *
+ * @return the connection consumer
+ *
+ * @exception JMSException if the <CODE>TopicConnection</CODE> object fails
+ * to create a connection consumer due to some
+ * internal error or invalid arguments for
+ * <CODE>sessionPool</CODE> and
+ * <CODE>messageSelector</CODE>.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ * @see javax.jms.ConnectionConsumer
+ */
+
+ ConnectionConsumer
+ createConnectionConsumer(Topic topic,
+ String messageSelector,
+ ServerSessionPool sessionPool,
+ int maxMessages)
+ throws JMSException;
+
+
+ /** Create a durable connection consumer for this connection (optional operation).
+ * This is an expert facility not used by regular JMS clients.
+ *
+ * @param topic the topic to access
+ * @param subscriptionName durable subscription name
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param sessionPool the server session pool to associate with this
+ * durable connection consumer
+ * @param maxMessages the maximum number of messages that can be
+ * assigned to a server session at one time
+ *
+ * @return the durable connection consumer
+ *
+ * @exception JMSException if the <CODE>TopicConnection</CODE> object fails
+ * to create a connection consumer due to some
+ * internal error or invalid arguments for
+ * <CODE>sessionPool</CODE> and
+ * <CODE>messageSelector</CODE>.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ * @see javax.jms.ConnectionConsumer
+ */
+
+ ConnectionConsumer
+ createDurableConnectionConsumer(Topic topic,
+ String subscriptionName,
+ String messageSelector,
+ ServerSessionPool sessionPool,
+ int maxMessages)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnectionFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnectionFactory.java
new file mode 100644
index 0000000000..68376b3a53
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicConnectionFactory.java
@@ -0,0 +1,84 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A client uses a <CODE>TopicConnectionFactory</CODE> object to create
+ * <CODE>TopicConnection</CODE> objects with a publish/subscribe JMS provider.
+ *
+ * <P>A<CODE> TopicConnectionFactory</CODE> can be used to create a
+ * <CODE>TopicConnection</CODE>, from which specialized topic-related objects
+ * can be created. A more general, and recommended approach
+ * is to use the <CODE>ConnectionFactory</CODE> object.
+ *
+ * <P> The <CODE>TopicConnectionFactory</CODE> object
+ * should be used to support existing code.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.ConnectionFactory
+ */
+
+public interface TopicConnectionFactory extends ConnectionFactory {
+
+ /** Creates a topic connection with the default user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @return a newly created topic connection
+ *
+ * @exception JMSException if the JMS provider fails to create a topic
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ TopicConnection
+ createTopicConnection() throws JMSException;
+
+
+ /** Creates a topic connection with the specified user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @param userName the caller's user name
+ * @param password the caller's password
+ *
+ * @return a newly created topic connection
+ *
+ * @exception JMSException if the JMS provider fails to create a topic
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ TopicConnection
+ createTopicConnection(String userName, String password)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicPublisher.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicPublisher.java
new file mode 100644
index 0000000000..b7dbb9fc69
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicPublisher.java
@@ -0,0 +1,207 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A client uses a <CODE>TopicPublisher</CODE> object to publish messages on a
+ * topic. A <CODE>TopicPublisher</CODE> object is the publish-subscribe form
+ * of a message producer.
+ *
+ * <P>Normally, the <CODE>Topic</CODE> is specified when a
+ * <CODE>TopicPublisher</CODE> is created. In this case, an attempt to use
+ * the <CODE>publish</CODE> methods for an unidentified
+ * <CODE>TopicPublisher</CODE> will throw a
+ * <CODE>java.lang.UnsupportedOperationException</CODE>.
+ *
+ * <P>If the <CODE>TopicPublisher</CODE> is created with an unidentified
+ * <CODE>Topic</CODE>, an attempt to use the <CODE>publish</CODE> methods that
+ * assume that the <CODE>Topic</CODE> has been identified will throw a
+ * <CODE>java.lang.UnsupportedOperationException</CODE>.
+ *
+ * <P>During the execution of its <CODE>publish</CODE> method,
+ * a message must not be changed by other threads within the client.
+ * If the message is modified, the result of the <CODE>publish</CODE> is
+ * undefined.
+ *
+ * <P>After publishing a message, a client may retain and modify it
+ * without affecting the message that has been published. The same message
+ * object may be published multiple times.
+ *
+ * <P>The following message headers are set as part of publishing a
+ * message: <code>JMSDestination</code>, <code>JMSDeliveryMode</code>,
+ * <code>JMSExpiration</code>, <code>JMSPriority</code>,
+ * <code>JMSMessageID</code> and <code>JMSTimeStamp</code>.
+ * When the message is published, the values of these headers are ignored.
+ * After completion of the <CODE>publish</CODE>, the headers hold the values
+ * specified by the method publishing the message. It is possible for the
+ * <CODE>publish</CODE> method not to set <code>JMSMessageID</code> and
+ * <code>JMSTimeStamp</code> if the
+ * setting of these headers is explicitly disabled by the
+ * <code>MessageProducer.setDisableMessageID</code> or
+ * <code>MessageProducer.setDisableMessageTimestamp</code> method.
+ *
+ *<P>Creating a <CODE>MessageProducer</CODE> provides the same features as
+ * creating a <CODE>TopicPublisher</CODE>. A <CODE>MessageProducer</CODE> object is
+ * recommended when creating new code. The <CODE>TopicPublisher</CODE> is
+ * provided to support existing code.
+
+ *
+ *<P>Because <CODE>TopicPublisher</CODE> inherits from
+ * <CODE>MessageProducer</CODE>, it inherits the
+ * <CODE>send</CODE> methods that are a part of the <CODE>MessageProducer</CODE>
+ * interface. Using the <CODE>send</CODE> methods will have the same
+ * effect as using the
+ * <CODE>publish</CODE> methods: they are functionally the same.
+ *
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see Session#createProducer(Destination)
+ * @see TopicSession#createPublisher(Topic)
+ */
+
+public interface TopicPublisher extends MessageProducer {
+
+ /** Gets the topic associated with this <CODE>TopicPublisher</CODE>.
+ *
+ * @return this publisher's topic
+ *
+ * @exception JMSException if the JMS provider fails to get the topic for
+ * this <CODE>TopicPublisher</CODE>
+ * due to some internal error.
+ */
+
+ Topic
+ getTopic() throws JMSException;
+
+
+ /** Publishes a message to the topic.
+ * Uses the <CODE>TopicPublisher</CODE>'s default delivery mode, priority,
+ * and time to live.
+ *
+ * @param message the message to publish
+ *
+ * @exception JMSException if the JMS provider fails to publish the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses this method
+ * with a <CODE>TopicPublisher</CODE> with
+ * an invalid topic.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>TopicPublisher</CODE> that
+ * did not specify a topic at creation time.
+ *
+ * @see javax.jms.MessageProducer#getDeliveryMode()
+ * @see javax.jms.MessageProducer#getTimeToLive()
+ * @see javax.jms.MessageProducer#getPriority()
+ */
+
+ void
+ publish(Message message) throws JMSException;
+
+
+ /** Publishes a message to the topic, specifying delivery mode,
+ * priority, and time to live.
+ *
+ * @param message the message to publish
+ * @param deliveryMode the delivery mode to use
+ * @param priority the priority for this message
+ * @param timeToLive the message's lifetime (in milliseconds)
+ *
+ * @exception JMSException if the JMS provider fails to publish the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses this method
+ * with a <CODE>TopicPublisher</CODE> with
+ * an invalid topic.
+ * @exception java.lang.UnsupportedOperationException if a client uses this
+ * method with a <CODE>TopicPublisher</CODE> that
+ * did not specify a topic at creation time.
+ */
+
+ void
+ publish(Message message,
+ int deliveryMode,
+ int priority,
+ long timeToLive) throws JMSException;
+
+
+ /** Publishes a message to a topic for an unidentified message producer.
+ * Uses the <CODE>TopicPublisher</CODE>'s default delivery mode,
+ * priority, and time to live.
+ *
+ * <P>Typically, a message producer is assigned a topic at creation
+ * time; however, the JMS API also supports unidentified message producers,
+ * which require that the topic be supplied every time a message is
+ * published.
+ *
+ * @param topic the topic to publish this message to
+ * @param message the message to publish
+ *
+ * @exception JMSException if the JMS provider fails to publish the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with an invalid topic.
+ *
+ * @see javax.jms.MessageProducer#getDeliveryMode()
+ * @see javax.jms.MessageProducer#getTimeToLive()
+ * @see javax.jms.MessageProducer#getPriority()
+ */
+
+ void
+ publish(Topic topic, Message message) throws JMSException;
+
+
+ /** Publishes a message to a topic for an unidentified message
+ * producer, specifying delivery mode, priority and time to live.
+ *
+ * <P>Typically, a message producer is assigned a topic at creation
+ * time; however, the JMS API also supports unidentified message producers,
+ * which require that the topic be supplied every time a message is
+ * published.
+ *
+ * @param topic the topic to publish this message to
+ * @param message the message to publish
+ * @param deliveryMode the delivery mode to use
+ * @param priority the priority for this message
+ * @param timeToLive the message's lifetime (in milliseconds)
+ *
+ * @exception JMSException if the JMS provider fails to publish the message
+ * due to some internal error.
+ * @exception MessageFormatException if an invalid message is specified.
+ * @exception InvalidDestinationException if a client uses
+ * this method with an invalid topic.
+ */
+
+ void
+ publish(Topic topic,
+ Message message,
+ int deliveryMode,
+ int priority,
+ long timeToLive) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicRequestor.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicRequestor.java
new file mode 100644
index 0000000000..0ef194b428
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicRequestor.java
@@ -0,0 +1,123 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** The <CODE>TopicRequestor</CODE> helper class simplifies
+ * making service requests.
+ *
+ * <P>The <CODE>TopicRequestor</CODE> constructor is given a non-transacted
+ * <CODE>TopicSession</CODE> and a destination <CODE>Topic</CODE>. It creates a
+ * <CODE>TemporaryTopic</CODE> for the responses and provides a
+ * <CODE>request</CODE> method that sends the request message and waits
+ * for its reply.
+ *
+ * <P>This is a basic request/reply abstraction that should be sufficient
+ * for most uses. JMS providers and clients are free to create more
+ * sophisticated versions.
+ *
+ * @version 1.0 - 8 July 1998
+ * @author Mark Hapner
+ * @author Rich Burridge
+ *
+ * @see javax.jms.QueueRequestor
+ */
+
+public class TopicRequestor {
+
+ TopicSession session; // The topic session the topic belongs to.
+ Topic topic; // The topic to perform the request/reply on.
+ TemporaryTopic tempTopic;
+ TopicPublisher publisher;
+ TopicSubscriber subscriber;
+
+
+ /** Constructor for the <CODE>TopicRequestor</CODE> class.
+ *
+ * <P>This implementation assumes the session parameter to be non-transacted,
+ * with a delivery mode of either <CODE>AUTO_ACKNOWLEDGE</CODE> or
+ * <CODE>DUPS_OK_ACKNOWLEDGE</CODE>.
+ *
+ * @param session the <CODE>TopicSession</CODE> the topic belongs to
+ * @param topic the topic to perform the request/reply call on
+ *
+ * @exception JMSException if the JMS provider fails to create the
+ * <CODE>TopicRequestor</CODE> due to some internal
+ * error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ */
+
+ public
+ TopicRequestor(TopicSession session, Topic topic) throws JMSException {
+ this.session = session;
+ this.topic = topic;
+ tempTopic = session.createTemporaryTopic();
+ publisher = session.createPublisher(topic);
+ subscriber = session.createSubscriber(tempTopic);
+ }
+
+
+ /** Sends a request and waits for a reply. The temporary topic is used for
+ * the <CODE>JMSReplyTo</CODE> destination; the first reply is returned,
+ * and any following replies are discarded.
+ *
+ * @param message the message to send
+ *
+ * @return the reply message
+ *
+ * @exception JMSException if the JMS provider fails to complete the
+ * request due to some internal error.
+ */
+
+ public Message
+ request(Message message) throws JMSException {
+ message.setJMSReplyTo(tempTopic);
+ publisher.publish(message);
+ return(subscriber.receive());
+ }
+
+
+ /** Closes the <CODE>TopicRequestor</CODE> and its session.
+ *
+ * <P>Since a provider may allocate some resources on behalf of a
+ * <CODE>TopicRequestor</CODE> outside the Java virtual machine, clients
+ * should close them when they
+ * are not needed. Relying on garbage collection to eventually reclaim
+ * these resources may not be timely enough.
+ *
+ * <P>Note that this method closes the <CODE>TopicSession</CODE> object
+ * passed to the <CODE>TopicRequestor</CODE> constructor.
+ *
+ * @exception JMSException if the JMS provider fails to close the
+ * <CODE>TopicRequestor</CODE> due to some internal
+ * error.
+ */
+
+ public void
+ close() throws JMSException {
+
+ // publisher and consumer created by constructor are implicitly closed.
+ session.close();
+ tempTopic.delete();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSession.java
new file mode 100644
index 0000000000..d42dc5fb94
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSession.java
@@ -0,0 +1,293 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A <CODE>TopicSession</CODE> object provides methods for creating
+ * <CODE>TopicPublisher</CODE>, <CODE>TopicSubscriber</CODE>, and
+ * <CODE>TemporaryTopic</CODE> objects. It also provides a method for
+ * deleting its client's durable subscribers.
+ *
+ *<P>A <CODE>TopicSession</CODE> is used for creating Pub/Sub specific
+ * objects. In general, use the <CODE>Session</CODE> object, and
+ * use <CODE>TopicSession</CODE> only to support
+ * existing code. Using the <CODE>Session</CODE> object simplifies the
+ * programming model, and allows transactions to be used across the two
+ * messaging domains.
+ *
+ * <P>A <CODE>TopicSession</CODE> cannot be used to create objects specific to the
+ * point-to-point domain. The following methods inherit from
+ * <CODE>Session</CODE>, but must throw an
+ * <CODE>IllegalStateException</CODE>
+ * if used from <CODE>TopicSession</CODE>:
+ *<UL>
+ * <LI><CODE>createBrowser</CODE>
+ * <LI><CODE>createQueue</CODE>
+ * <LI><CODE>createTemporaryQueue</CODE>
+ *</UL>
+ *
+ * @version 1.1 - April 9, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session
+ * @see javax.jms.Connection#createSession(boolean, int)
+ * @see javax.jms.TopicConnection#createTopicSession(boolean, int)
+ * @see javax.jms.XATopicSession#getTopicSession()
+ */
+
+public interface TopicSession extends Session {
+
+ /** Creates a topic identity given a <CODE>Topic</CODE> name.
+ *
+ * <P>This facility is provided for the rare cases where clients need to
+ * dynamically manipulate topic identity. This allows the creation of a
+ * topic identity with a provider-specific name. Clients that depend
+ * on this ability are not portable.
+ *
+ * <P>Note that this method is not for creating the physical topic.
+ * The physical creation of topics is an administrative task and is not
+ * to be initiated by the JMS API. The one exception is the
+ * creation of temporary topics, which is accomplished with the
+ * <CODE>createTemporaryTopic</CODE> method.
+ *
+ * @param topicName the name of this <CODE>Topic</CODE>
+ *
+ * @return a <CODE>Topic</CODE> with the given name
+ *
+ * @exception JMSException if the session fails to create a topic
+ * due to some internal error.
+ */
+
+ Topic
+ createTopic(String topicName) throws JMSException;
+
+
+ /** Creates a nondurable subscriber to the specified topic.
+ *
+ * <P>A client uses a <CODE>TopicSubscriber</CODE> object to receive
+ * messages that have been published to a topic.
+ *
+ * <P>Regular <CODE>TopicSubscriber</CODE> objects are not durable.
+ * They receive only messages that are published while they are active.
+ *
+ * <P>In some cases, a connection may both publish and subscribe to a
+ * topic. The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber
+ * to inhibit the delivery of messages published by its own connection.
+ * The default value for this attribute is false.
+ *
+ * @param topic the <CODE>Topic</CODE> to subscribe to
+ *
+ * @exception JMSException if the session fails to create a subscriber
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ */
+
+ TopicSubscriber
+ createSubscriber(Topic topic) throws JMSException;
+
+
+ /** Creates a nondurable subscriber to the specified topic, using a
+ * message selector or specifying whether messages published by its
+ * own connection should be delivered to it.
+ *
+ * <P>A client uses a <CODE>TopicSubscriber</CODE> object to receive
+ * messages that have been published to a topic.
+ *
+ * <P>Regular <CODE>TopicSubscriber</CODE> objects are not durable.
+ * They receive only messages that are published while they are active.
+ *
+ * <P>Messages filtered out by a subscriber's message selector will
+ * never be delivered to the subscriber. From the subscriber's
+ * perspective, they do not exist.
+ *
+ * <P>In some cases, a connection may both publish and subscribe to a
+ * topic. The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber
+ * to inhibit the delivery of messages published by its own connection.
+ * The default value for this attribute is false.
+ *
+ * @param topic the <CODE>Topic</CODE> to subscribe to
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param noLocal if set, inhibits the delivery of messages published
+ * by its own connection
+ *
+ * @exception JMSException if the session fails to create a subscriber
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ */
+
+ TopicSubscriber
+ createSubscriber(Topic topic,
+ String messageSelector,
+ boolean noLocal) throws JMSException;
+
+
+ /** Creates a durable subscriber to the specified topic.
+ *
+ * <P>If a client needs to receive all the messages published on a
+ * topic, including the ones published while the subscriber is inactive,
+ * it uses a durable <CODE>TopicSubscriber</CODE>. The JMS provider
+ * retains a record of this
+ * durable subscription and insures that all messages from the topic's
+ * publishers are retained until they are acknowledged by this
+ * durable subscriber or they have expired.
+ *
+ * <P>Sessions with durable subscribers must always provide the same
+ * client identifier. In addition, each client must specify a name that
+ * uniquely identifies (within client identifier) each durable
+ * subscription it creates. Only one session at a time can have a
+ * <CODE>TopicSubscriber</CODE> for a particular durable subscription.
+ *
+ * <P>A client can change an existing durable subscription by creating
+ * a durable <CODE>TopicSubscriber</CODE> with the same name and a new
+ * topic and/or
+ * message selector. Changing a durable subscriber is equivalent to
+ * unsubscribing (deleting) the old one and creating a new one.
+ *
+ * <P>In some cases, a connection may both publish and subscribe to a
+ * topic. The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber
+ * to inhibit the delivery of messages published by its own connection.
+ * The default value for this attribute is false.
+ *
+ * @param topic the non-temporary <CODE>Topic</CODE> to subscribe to
+ * @param name the name used to identify this subscription
+ *
+ * @exception JMSException if the session fails to create a subscriber
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ */
+
+ TopicSubscriber
+ createDurableSubscriber(Topic topic,
+ String name) throws JMSException;
+
+
+ /** Creates a durable subscriber to the specified topic, using a
+ * message selector or specifying whether messages published by its
+ * own connection should be delivered to it.
+ *
+ * <P>If a client needs to receive all the messages published on a
+ * topic, including the ones published while the subscriber is inactive,
+ * it uses a durable <CODE>TopicSubscriber</CODE>. The JMS provider
+ * retains a record of this
+ * durable subscription and insures that all messages from the topic's
+ * publishers are retained until they are acknowledged by this
+ * durable subscriber or they have expired.
+ *
+ * <P>Sessions with durable subscribers must always provide the same
+ * client identifier. In addition, each client must specify a name which
+ * uniquely identifies (within client identifier) each durable
+ * subscription it creates. Only one session at a time can have a
+ * <CODE>TopicSubscriber</CODE> for a particular durable subscription.
+ * An inactive durable subscriber is one that exists but
+ * does not currently have a message consumer associated with it.
+ *
+ * <P>A client can change an existing durable subscription by creating
+ * a durable <CODE>TopicSubscriber</CODE> with the same name and a new
+ * topic and/or
+ * message selector. Changing a durable subscriber is equivalent to
+ * unsubscribing (deleting) the old one and creating a new one.
+ *
+ * @param topic the non-temporary <CODE>Topic</CODE> to subscribe to
+ * @param name the name used to identify this subscription
+ * @param messageSelector only messages with properties matching the
+ * message selector expression are delivered. A value of null or
+ * an empty string indicates that there is no message selector
+ * for the message consumer.
+ * @param noLocal if set, inhibits the delivery of messages published
+ * by its own connection
+ *
+ * @exception JMSException if the session fails to create a subscriber
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ * @exception InvalidSelectorException if the message selector is invalid.
+ */
+
+ TopicSubscriber
+ createDurableSubscriber(Topic topic,
+ String name,
+ String messageSelector,
+ boolean noLocal) throws JMSException;
+
+
+ /** Creates a publisher for the specified topic.
+ *
+ * <P>A client uses a <CODE>TopicPublisher</CODE> object to publish
+ * messages on a topic.
+ * Each time a client creates a <CODE>TopicPublisher</CODE> on a topic, it
+ * defines a
+ * new sequence of messages that have no ordering relationship with the
+ * messages it has previously sent.
+ *
+ * @param topic the <CODE>Topic</CODE> to publish to, or null if this is an
+ * unidentified producer
+ *
+ * @exception JMSException if the session fails to create a publisher
+ * due to some internal error.
+ * @exception InvalidDestinationException if an invalid topic is specified.
+ */
+
+ TopicPublisher
+ createPublisher(Topic topic) throws JMSException;
+
+
+ /** Creates a <CODE>TemporaryTopic</CODE> object. Its lifetime will be that
+ * of the <CODE>TopicConnection</CODE> unless it is deleted earlier.
+ *
+ * @return a temporary topic identity
+ *
+ * @exception JMSException if the session fails to create a temporary
+ * topic due to some internal error.
+ */
+
+ TemporaryTopic
+ createTemporaryTopic() throws JMSException;
+
+
+ /** Unsubscribes a durable subscription that has been created by a client.
+ *
+ * <P>This method deletes the state being maintained on behalf of the
+ * subscriber by its provider.
+ *
+ * <P>It is erroneous for a client to delete a durable subscription
+ * while there is an active <CODE>TopicSubscriber</CODE> for the
+ * subscription, or while a consumed message is part of a pending
+ * transaction or has not been acknowledged in the session.
+ *
+ * @param name the name used to identify this subscription
+ *
+ * @exception JMSException if the session fails to unsubscribe to the
+ * durable subscription due to some internal error.
+ * @exception InvalidDestinationException if an invalid subscription name
+ * is specified.
+ */
+
+ void
+ unsubscribe(String name) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSubscriber.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSubscriber.java
new file mode 100644
index 0000000000..9a1337c5cb
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TopicSubscriber.java
@@ -0,0 +1,125 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** A client uses a <CODE>TopicSubscriber</CODE> object to receive messages that
+ * have been published to a topic. A <CODE>TopicSubscriber</CODE> object is the
+ * publish/subscribe form of a message consumer. A <CODE>MessageConsumer</CODE>
+ * can be created by using <CODE>Session.createConsumer</CODE>.
+ *
+ * <P>A <CODE>TopicSession</CODE> allows the creation of multiple
+ * <CODE>TopicSubscriber</CODE> objects per topic. It will deliver each
+ * message for a topic to each
+ * subscriber eligible to receive it. Each copy of the message
+ * is treated as a completely separate message. Work done on one copy has
+ * no effect on the others; acknowledging one does not acknowledge the
+ * others; one message may be delivered immediately, while another waits
+ * for its subscriber to process messages ahead of it.
+ *
+ * <P>Regular <CODE>TopicSubscriber</CODE> objects are not durable. They
+ * receive only messages that are published while they are active.
+ *
+ * <P>Messages filtered out by a subscriber's message selector will never
+ * be delivered to the subscriber. From the subscriber's perspective, they
+ * do not exist.
+ *
+ * <P>In some cases, a connection may both publish and subscribe to a topic.
+ * The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber to inhibit
+ * the
+ * delivery of messages published by its own connection.
+ *
+ * <P>If a client needs to receive all the messages published on a topic,
+ * including the ones published while the subscriber is inactive, it uses
+ * a durable <CODE>TopicSubscriber</CODE>. The JMS provider retains a record of
+ * this durable
+ * subscription and insures that all messages from the topic's publishers
+ * are retained until they are acknowledged by this durable
+ * subscriber or they have expired.
+ *
+ * <P>Sessions with durable subscribers must always provide the same client
+ * identifier. In addition, each client must specify a name that uniquely
+ * identifies (within client identifier) each durable subscription it creates.
+ * Only one session at a time can have a <CODE>TopicSubscriber</CODE> for a
+ * particular durable subscription.
+ *
+ * <P>A client can change an existing durable subscription by creating a
+ * durable <CODE>TopicSubscriber</CODE> with the same name and a new topic
+ * and/or message
+ * selector. Changing a durable subscription is equivalent to unsubscribing
+ * (deleting) the old one and creating a new one.
+ *
+ * <P>The <CODE>unsubscribe</CODE> method is used to delete a durable
+ * subscription. The <CODE>unsubscribe</CODE> method can be used at the
+ * <CODE>Session</CODE> or <CODE>TopicSession</CODE> level.
+ * This method deletes the state being
+ * maintained on behalf of the subscriber by its provider.
+ *
+ * <P>Creating a <CODE>MessageConsumer</CODE> provides the same features as
+ * creating a <CODE>TopicSubscriber</CODE>. To create a durable subscriber,
+ * use of <CODE>Session.CreateDurableSubscriber</CODE> is recommended. The
+ * <CODE>TopicSubscriber</CODE> is provided to support existing code.
+ *
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session#createConsumer
+ * @see javax.jms.Session#createDurableSubscriber
+ * @see javax.jms.TopicSession
+ * @see javax.jms.TopicSession#createSubscriber
+ * @see javax.jms.MessageConsumer
+ */
+
+public interface TopicSubscriber extends MessageConsumer {
+
+ /** Gets the <CODE>Topic</CODE> associated with this subscriber.
+ *
+ * @return this subscriber's <CODE>Topic</CODE>
+ *
+ * @exception JMSException if the JMS provider fails to get the topic for
+ * this topic subscriber
+ * due to some internal error.
+ */
+
+ Topic
+ getTopic() throws JMSException;
+
+
+ /** Gets the <CODE>NoLocal</CODE> attribute for this subscriber.
+ * The default value for this attribute is false.
+ *
+ * @return true if locally published messages are being inhibited
+ *
+ * @exception JMSException if the JMS provider fails to get the
+ * <CODE>NoLocal</CODE> attribute for
+ * this topic subscriber
+ * due to some internal error.
+ */
+
+ boolean
+ getNoLocal() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionInProgressException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionInProgressException.java
new file mode 100644
index 0000000000..010bb58c2b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionInProgressException.java
@@ -0,0 +1,62 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/**
+ * <P> This exception is thrown when an
+ * operation is invalid because a transaction is in progress.
+ * For instance, an attempt to call <CODE>Session.commit</CODE> when a
+ * session is part of a distributed transaction should throw a
+ * <CODE>TransactionInProgressException</CODE>.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class TransactionInProgressException extends JMSException {
+
+ /** Constructs a <CODE>TransactionInProgressException</CODE> with the
+ * specified reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ TransactionInProgressException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>TransactionInProgressException</CODE> with the
+ * specified reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ TransactionInProgressException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionRolledBackException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionRolledBackException.java
new file mode 100644
index 0000000000..d23a9f70a5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/TransactionRolledBackException.java
@@ -0,0 +1,60 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/**
+ * <P> This exception must be thrown when a
+ * call to <CODE>Session.commit</CODE> results in a rollback of the current
+ * transaction.
+ *
+ * @version 26 August 1998
+ * @author Rahul Sharma
+ **/
+
+public class TransactionRolledBackException extends JMSException {
+
+ /** Constructs a <CODE>TransactionRolledBackException</CODE> with the
+ * specified reason and error code.
+ *
+ * @param reason a description of the exception
+ * @param errorCode a string specifying the vendor-specific
+ * error code
+ *
+ **/
+ public
+ TransactionRolledBackException(String reason, String errorCode) {
+ super(reason, errorCode);
+ }
+
+ /** Constructs a <CODE>TransactionRolledBackException</CODE> with the
+ * specified reason. The error code defaults to null.
+ *
+ * @param reason a description of the exception
+ **/
+ public
+ TransactionRolledBackException(String reason) {
+ super(reason);
+ }
+
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnection.java
new file mode 100644
index 0000000000..cd308aaa4e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnection.java
@@ -0,0 +1,78 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** The <CODE>XAConnection</CODE> interface extends the capability of
+ * <CODE>Connection</CODE> by providing an <CODE>XASession</CODE> (optional).
+ *
+ *<P>The <CODE>XAConnection</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.XAQueueConnection
+ * @see javax.jms.XATopicConnection
+ */
+
+public interface XAConnection extends Connection{
+
+ /** Creates an <CODE>XASession</CODE> object.
+ *
+ * @return a newly created <CODE>XASession</CODE>
+ *
+ * @exception JMSException if the <CODE>XAConnection</CODE> object
+ * fails to create an <CODE>XASession</CODE> due to
+ * some internal error.
+ *
+ * @since 1.1
+ */
+
+ XASession
+ createXASession() throws JMSException;
+
+ /** Creates an <CODE>Session</CODE> object.
+ *
+ * @param transacted usage undefined
+ * @param acknowledgeMode usage undefined
+ *
+ * @return a <CODE>Session</CODE> object
+ *
+ * @exception JMSException if the <CODE>XAConnection</CODE> object
+ * fails to create an <CODE>Session</CODE> due to
+ * some internal error.
+ *
+ * @since 1.1
+ */
+ Session
+ createSession(boolean transacted,
+ int acknowledgeMode) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnectionFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnectionFactory.java
new file mode 100644
index 0000000000..bf4dc2393f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAConnectionFactory.java
@@ -0,0 +1,101 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** The <CODE>XAConnectionFactory</CODE> interface is a base interface for the
+ * <CODE>XAQueueConnectionFactory</CODE> and
+ * <CODE>XATopicConnectionFactory</CODE> interfaces.
+ *
+ * <P>Some application servers provide support for grouping JTS capable
+ * resource use into a distributed transaction (optional). To include JMS API transactions
+ * in a JTS transaction, an application server requires a JTS aware JMS
+ * provider. A JMS provider exposes its JTS support using an
+ * <CODE>XAConnectionFactory</CODE> object, which an application server uses
+ * to create <CODE>XAConnection</CODE> objects.
+ *
+ * <P><CODE>XAConnectionFactory</CODE> objects are JMS administered objects,
+ * just like <CODE>ConnectionFactory</CODE> objects. It is expected that
+ * application servers will find them using the Java Naming and Directory
+ * Interface (JNDI) API.
+ *
+ *<P>The <CODE>XAConnectionFactory</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 April 4, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.XAQueueConnectionFactory
+ * @see javax.jms.XATopicConnectionFactory
+ */
+
+public interface XAConnectionFactory {
+
+ /** Creates an <CODE>XAConnection</CODE> with the default user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @return a newly created <CODE>XAConnection</CODE>
+ *
+ * @exception JMSException if the JMS provider fails to create an XA
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ *
+ * @since 1.1
+ */
+
+ XAConnection
+ createXAConnection() throws JMSException;
+
+
+ /** Creates an XA connection with the specified user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @param userName the caller's user name
+ * @param password the caller's password
+ *
+ * @return a newly created XA connection
+ *
+ * @exception JMSException if the JMS provider fails to create an XA
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ *
+ * @since 1.1
+ */
+
+ XAConnection
+ createXAConnection(String userName, String password)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnection.java
new file mode 100644
index 0000000000..691c7fdd46
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnection.java
@@ -0,0 +1,75 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** An <CODE>XAQueueConnection</CODE> provides the same create options as
+ * <CODE>QueueConnection</CODE> (optional).
+ * The only difference is that an <CODE>XAConnection</CODE> is by definition
+ * transacted.
+ *
+ *<P>The <CODE>XAQueueConnection</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 February 2 - 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.XAConnection
+ */
+
+public interface XAQueueConnection
+ extends XAConnection, QueueConnection {
+
+ /** Creates an <CODE>XAQueueSession</CODE> object.
+ *
+ * @return a newly created <CODE>XAQueueSession</CODE>
+ *
+ * @exception JMSException if the <CODE>XAQueueConnection</CODE> object
+ * fails to create an XA queue session due to some
+ * internal error.
+ */
+
+ XAQueueSession
+ createXAQueueSession() throws JMSException;
+
+ /** Creates an <CODE>XAQueueSession</CODE> object.
+ *
+ * @param transacted usage undefined
+ * @param acknowledgeMode usage undefined
+ *
+ * @return a newly created <CODE>XAQueueSession</CODE>
+ *
+ * @exception JMSException if the <CODE>XAQueueConnection</CODE> object
+ * fails to create an XA queue session due to some
+ * internal error.
+ */
+ QueueSession
+ createQueueSession(boolean transacted,
+ int acknowledgeMode) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnectionFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnectionFactory.java
new file mode 100644
index 0000000000..5978e54d12
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueConnectionFactory.java
@@ -0,0 +1,85 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** An <CODE>XAQueueConnectionFactory</CODE> provides the same create options as
+ * a <CODE>QueueConnectionFactory</CODE> (optional).
+ *
+ * <P>The <CODE>XATopicConnectionFactory</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 - 8 April 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.QueueConnectionFactory
+ * @see javax.jms.XAConnectionFactory
+ */
+
+public interface XAQueueConnectionFactory
+ extends XAConnectionFactory, QueueConnectionFactory {
+
+ /** Creates an XA queue connection with the default user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @return a newly created XA queue connection
+ *
+ * @exception JMSException if the JMS provider fails to create an XA queue
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ XAQueueConnection
+ createXAQueueConnection() throws JMSException;
+
+
+ /** Creates an XA queue connection with the specified user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @param userName the caller's user name
+ * @param password the caller's password
+ *
+ * @return a newly created XA queue connection
+ *
+ * @exception JMSException if the JMS provider fails to create an XA queue
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ XAQueueConnection
+ createXAQueueConnection(String userName, String password)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueSession.java
new file mode 100644
index 0000000000..d524162a6a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XAQueueSession.java
@@ -0,0 +1,58 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** An <CODE>XAQueueSession</CODE> provides a regular <CODE>QueueSession</CODE>,
+ * which can be used to
+ * create <CODE>QueueReceiver</CODE>, <CODE>QueueSender</CODE>, and
+ *<CODE>QueueBrowser</CODE> objects (optional).
+ *
+ * <P>The <CODE>XAQueueSession</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.XASession
+ */
+
+public interface XAQueueSession extends XASession {
+
+ /** Gets the queue session associated with this <CODE>XAQueueSession</CODE>.
+ *
+ * @return the queue session object
+ *
+ * @exception JMSException if an internal error occurs.
+ */
+
+ QueueSession
+ getQueueSession() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XASession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XASession.java
new file mode 100644
index 0000000000..31689cf49c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XASession.java
@@ -0,0 +1,123 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+import javax.transaction.xa.XAResource;
+
+/** The <CODE>XASession</CODE> interface extends the capability of
+ * <CODE>Session</CODE> by adding access to a JMS provider's support for the
+ * Java Transaction API (JTA) (optional). This support takes the form of a
+ * <CODE>javax.transaction.xa.XAResource</CODE> object. The functionality of
+ * this object closely resembles that defined by the standard X/Open XA
+ * Resource interface.
+ *
+ * <P>An application server controls the transactional assignment of an
+ * <CODE>XASession</CODE> by obtaining its <CODE>XAResource</CODE>. It uses
+ * the <CODE>XAResource</CODE> to assign the session to a transaction, prepare
+ * and commit work on the transaction, and so on.
+ *
+ * <P>An <CODE>XAResource</CODE> provides some fairly sophisticated facilities
+ * for interleaving work on multiple transactions, recovering a list of
+ * transactions in progress, and so on. A JTA aware JMS provider must fully
+ * implement this functionality. This could be done by using the services
+ * of a database that supports XA, or a JMS provider may choose to implement
+ * this functionality from scratch.
+ *
+ * <P>A client of the application server is given what it thinks is a
+ * regular JMS <CODE>Session</CODE>. Behind the scenes, the application server
+ * controls the transaction management of the underlying
+ * <CODE>XASession</CODE>.
+ *
+ * <P>The <CODE>XASession</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.Session
+ */
+
+public interface XASession extends Session {
+
+ /** Gets the session associated with this <CODE>XASession</CODE>.
+ *
+ * @return the session object
+ *
+ * @exception JMSException if an internal error occurs.
+ *
+ * @since 1.1
+ */
+
+ Session
+ getSession() throws JMSException;
+
+ /** Returns an XA resource to the caller.
+ *
+ * @return an XA resource to the caller
+ */
+
+ XAResource
+ getXAResource();
+
+ /** Indicates whether the session is in transacted mode.
+ *
+ * @return true
+ *
+ * @exception JMSException if the JMS provider fails to return the
+ * transaction mode due to some internal error.
+ */
+
+ boolean
+ getTransacted() throws JMSException;
+
+
+ /** Throws a <CODE>TransactionInProgressException</CODE>, since it should
+ * not be called for an <CODE>XASession</CODE> object.
+ *
+ * @exception TransactionInProgressException if the method is called on
+ * an <CODE>XASession</CODE>.
+ *
+ */
+
+ void
+ commit() throws JMSException;
+
+
+ /** Throws a <CODE>TransactionInProgressException</CODE>, since it should
+ * not be called for an <CODE>XASession</CODE> object.
+ *
+ * @exception TransactionInProgressException if the method is called on
+ * an <CODE>XASession</CODE>.
+ *
+ */
+
+ void
+ rollback() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnection.java
new file mode 100644
index 0000000000..5f6b218fff
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnection.java
@@ -0,0 +1,76 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** An <CODE>XATopicConnection</CODE> provides the same create options as
+ * <CODE>TopicConnection</CODE> (optional). The Topic connections created are
+ * transactional.
+ *
+ * <P>The <CODE>XATopicConnection</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 - February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.XAConnection
+ */
+
+public interface XATopicConnection
+ extends XAConnection, TopicConnection {
+
+ /** Creates an <CODE>XATopicSession</CODE> object.
+ *
+ * @return a newly created XA topic session
+ *
+ * @exception JMSException if the <CODE>XATopicConnection</CODE> object
+ * fails to create an XA topic session due to some
+ * internal error.
+ */
+
+ XATopicSession
+ createXATopicSession() throws JMSException;
+
+ /** Creates an <CODE>XATopicSession</CODE> object.
+ *
+ * @param transacted usage undefined
+ * @param acknowledgeMode usage undefined
+ *
+ * @return a newly created XA topic session
+ *
+ * @exception JMSException if the <CODE>XATopicConnection</CODE> object
+ * fails to create an XA topic session due to some
+ * internal error.
+ */
+
+ TopicSession
+ createTopicSession(boolean transacted,
+ int acknowledgeMode) throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnectionFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnectionFactory.java
new file mode 100644
index 0000000000..6f589d1493
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicConnectionFactory.java
@@ -0,0 +1,85 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+
+package javax.jms;
+
+/** An <CODE>XATopicConnectionFactory</CODE> provides the same create options as
+ * a <CODE>TopicConnectionFactory</CODE> (optional).
+ *
+ * <P>The <CODE>XATopicConnectionFactory</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than use these XA
+ * interfaces directly.
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.TopicConnectionFactory
+ * @see javax.jms.XAConnectionFactory
+ */
+
+public interface XATopicConnectionFactory
+ extends XAConnectionFactory, TopicConnectionFactory {
+
+ /** Creates an XA topic connection with the default user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @return a newly created XA topic connection
+ *
+ * @exception JMSException if the JMS provider fails to create an XA topic
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ XATopicConnection
+ createXATopicConnection() throws JMSException;
+
+
+ /** Creates an XA topic connection with the specified user identity.
+ * The connection is created in stopped mode. No messages
+ * will be delivered until the <code>Connection.start</code> method
+ * is explicitly called.
+ *
+ * @param userName the caller's user name
+ * @param password the caller's password
+ *
+ * @return a newly created XA topic connection
+ *
+ * @exception JMSException if the JMS provider fails to create an XA topic
+ * connection due to some internal error.
+ * @exception JMSSecurityException if client authentication fails due to
+ * an invalid user name or password.
+ */
+
+ XATopicConnection
+ createXATopicConnection(String userName, String password)
+ throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicSession.java
new file mode 100644
index 0000000000..091e391438
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.api/src/javax/jms/XATopicSession.java
@@ -0,0 +1,57 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the license at
+ * https://glassfish.dev.java.net/public/CDDLv1.0.html or
+ * glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at glassfish/bootstrap/legal/CDDLv1.0.txt.
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * you own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ */
+
+package javax.jms;
+
+/** An <CODE>XATopicSession</CODE> provides a regular <CODE>TopicSession</CODE>.
+ * which can be used to create <CODE>TopicSubscriber</CODE> and
+ * <CODE>TopicPublisher</CODE> objects (optional).
+ *
+ * <P>The <CODE>XATopicSession</CODE> interface is optional. JMS providers
+ * are not required to support this interface. This interface is for
+ * use by JMS providers to support transactional environments.
+ * Client programs are strongly encouraged to use the transactional support
+ * available in their environment, rather than using these XA
+ * interfaces directly.
+ *
+ * @version 1.1 February 2, 2002
+ * @author Mark Hapner
+ * @author Rich Burridge
+ * @author Kate Stout
+ *
+ * @see javax.jms.XASession
+ * @see javax.jms.TopicSession
+ */
+
+public interface XATopicSession extends XASession {
+
+ /** Gets the topic session associated with this <CODE>XATopicSession</CODE>.
+ *
+ * @return the topic session object
+ *
+ * @exception JMSException if an internal error occurs.
+ */
+
+ TopicSession
+ getTopicSession() throws JMSException;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.options b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.options
new file mode 100644
index 0000000000..43a5c9f199
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.jms.server.jdbc/debug = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.project b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.project
new file mode 100644
index 0000000000..7768ecb159
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.jms.server.jdbc</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..64b4cb8d2c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 13:02:04 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..7b696b453b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.net4j.jms.server.jdbc
+Bundle-Version: 4.0.100.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.net4j.jms.server.internal.jdbc.bundle.OM
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.jms.server;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.net4j.db;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Import-Package: javax.jms;version="[1.1.0,2.0.0)"
+Export-Package: org.eclipse.net4j.jms.server.internal.jdbc;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.jms.server.internal.jdbc.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.jms.server.jdbc;version="4.0.100"
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/build.properties
new file mode 100644
index 0000000000..152299f8f0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/db.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/db.txt
new file mode 100644
index 0000000000..531b9c2161
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/db.txt
@@ -0,0 +1,61 @@
+SYSTEM_DATA
+===========
+ id bigint
+ version varchar(20)
+ creationdate date
+
+
+
+SEEDS
+=====
+ name varchar(20)
+ seed bigint
+
+
+
+DESTINATIONS
+============
+ name varchar(255)
+ isqueue int
+ destination_id bigint
+
+
+
+MESSAGES
+========
+ message_id varchar(64)
+ destination_id bigint
+ priority int
+ createtime bigint
+ expirytime bigint
+ processed int
+ messageblob longblob
+
+
+
+MESSAGE_HANDLES
+===============
+ message_id varchar(64)
+ destination_id bigint
+ consumer_id bigint
+ priority int
+ acceptedtime bigint
+ sequencenumber bigint
+ expirytime bigint
+ delivered int
+
+
+
+CONSUMERS
+=========
+ name varchar(255)
+ destination_id bigint
+ consumer_id bigint
+ created bigint
+
+
+
+USERS
+=====
+ username varchar(50)
+ password varchar(50)
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/plugin.properties
new file mode 100644
index 0000000000..18072b3d17
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j JMS Provider Server DB
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCStore.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCStore.java
new file mode 100644
index 0000000000..d340b5909b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCStore.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server.internal.jdbc;
+
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.jms.internal.server.store.AbstractStore;
+import org.eclipse.net4j.jms.internal.server.store.StoreException;
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+
+import javax.sql.DataSource;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * @author Eike Stepper
+ */
+public class JDBCStore extends AbstractStore
+{
+ private static final String STORE_TYPE = "JDBC"; //$NON-NLS-1$
+
+ private IDBAdapter dbAdapter;
+
+ private DataSource dataSource;
+
+ public JDBCStore(IDBAdapter dbAdapter, DataSource dataSource)
+ {
+ super(STORE_TYPE);
+ if (dbAdapter == null)
+ {
+ throw new IllegalArgumentException("dbAdapter == null"); //$NON-NLS-1$
+ }
+
+ if (dataSource == null)
+ {
+ throw new IllegalArgumentException("dataSource == null"); //$NON-NLS-1$
+ }
+
+ this.dbAdapter = dbAdapter;
+ this.dataSource = dataSource;
+ }
+
+ public IDBAdapter getDBAdapter()
+ {
+ return dbAdapter;
+ }
+
+ public DataSource getDataSource()
+ {
+ return dataSource;
+ }
+
+ public Connection getConnection()
+ {
+ try
+ {
+ return dataSource.getConnection();
+ }
+ catch (SQLException ex)
+ {
+ throw new StoreException(ex);
+ }
+ }
+
+ public void initDatabase(String instanceID)
+ {
+ JMSSchema.INSTANCE.create(dbAdapter, dataSource);
+ // TODO Store instanceID
+ }
+
+ public IStoreTransaction startTransaction()
+ {
+ try
+ {
+ Connection connection = getConnection();
+ connection.setAutoCommit(false);
+ return new JDBCTransaction(this, connection);
+ }
+ catch (SQLException ex)
+ {
+ throw new StoreException(ex);
+ }
+ }
+
+ public void commitTransaction(IStoreTransaction transaction)
+ {
+ JDBCTransaction jdbcTransaction = (JDBCTransaction)transaction;
+ try
+ {
+ Connection connection = jdbcTransaction.getConnection();
+ connection.commit();
+ }
+ catch (SQLException ex)
+ {
+ throw new StoreException(ex);
+ }
+ finally
+ {
+ jdbcTransaction.dispose();
+ }
+ }
+
+ public void rollbackTransaction(IStoreTransaction transaction)
+ {
+ JDBCTransaction jdbcTransaction = (JDBCTransaction)transaction;
+ try
+ {
+ Connection connection = jdbcTransaction.getConnection();
+ connection.rollback();
+ }
+ catch (SQLException ex)
+ {
+ throw new StoreException(ex);
+ }
+ finally
+ {
+ jdbcTransaction.dispose();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCTransaction.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCTransaction.java
new file mode 100644
index 0000000000..6857c0c34a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JDBCTransaction.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server.internal.jdbc;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.jms.internal.server.ServerConsumer;
+import org.eclipse.net4j.jms.internal.server.ServerDestination;
+import org.eclipse.net4j.jms.internal.server.store.AbstractStore;
+import org.eclipse.net4j.jms.internal.server.store.AbstractTransaction;
+
+import java.sql.Connection;
+
+/**
+ * @author Eike Stepper
+ */
+public class JDBCTransaction extends AbstractTransaction
+{
+ private Connection connection;
+
+ public JDBCTransaction(AbstractStore store, Connection connection)
+ {
+ super(store);
+ this.connection = connection;
+ }
+
+ public Connection getConnection()
+ {
+ return connection;
+ }
+
+ public void dispose()
+ {
+ connection = null;
+ }
+
+ @Override
+ protected String[] doGetDestinationNames()
+ {
+ return NO_DESTINATION_NAMES;
+ }
+
+ @Override
+ protected ServerDestination doGetDestination(String name)
+ {
+ return null;
+ }
+
+ @Override
+ protected long[] doGetConsumerIDs()
+ {
+ return NO_CONSUMER_IDS;
+ }
+
+ @Override
+ protected ServerConsumer doGetConsumer(long id)
+ {
+ return null;
+ }
+
+ @Override
+ protected void doDestinationAdded(ServerDestination destination)
+ {
+ }
+
+ @Override
+ protected void doDestinationRemoved(ServerDestination destination)
+ {
+ }
+
+ @Override
+ protected void doConsumerAdded(ServerConsumer consumer)
+ {
+ }
+
+ @Override
+ protected void doConsumerRemoved(ServerConsumer consumer)
+ {
+ }
+
+ @Override
+ protected void doMessageReceived(MessageImpl message)
+ {
+ }
+
+ @Override
+ protected void doMessageSent(MessageImpl message, long consumerID)
+ {
+ }
+
+ @Override
+ protected void doMessageAcknowledged(MessageImpl message, long consumerID)
+ {
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JMSSchema.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JMSSchema.java
new file mode 100644
index 0000000000..75fb324616
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/JMSSchema.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server.internal.jdbc;
+
+import org.eclipse.net4j.db.DBType;
+import org.eclipse.net4j.db.ddl.IDBField;
+import org.eclipse.net4j.db.ddl.IDBIndex;
+import org.eclipse.net4j.db.ddl.IDBTable;
+import org.eclipse.net4j.spi.db.DBSchema;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSSchema extends DBSchema
+{
+ public static final JMSSchema INSTANCE = new JMSSchema();
+
+ /**
+ * DBTable Destinations
+ */
+ public static final IDBTable DESTINATIONS = INSTANCE.addTable("destinations"); //$NON-NLS-1$
+
+ public static final IDBField DESTINATIONS_NAME = //
+ DESTINATIONS.addField("name", DBType.VARCHAR, 255); //$NON-NLS-1$
+
+ public static final IDBField DESTINATIONS_TYPE = //
+ DESTINATIONS.addField("type", DBType.INTEGER); //$NON-NLS-1$
+
+ public static final IDBIndex INDEX_DESTINATIONS_PK = //
+ DESTINATIONS.addIndex(IDBIndex.Type.PRIMARY_KEY, DESTINATIONS_NAME);
+
+ /**
+ * DBTable Messages
+ */
+ public static final IDBTable MESSAGES = INSTANCE.addTable("messages"); //$NON-NLS-1$
+
+ public static final IDBField MESSAGES_ID = //
+ MESSAGES.addField("id", DBType.VARCHAR); //$NON-NLS-1$
+
+ public static final IDBField MESSAGES_DESTINATION = //
+ MESSAGES.addField("destination", DBType.VARCHAR); //$NON-NLS-1$
+
+ public static final IDBField MESSAGES_PRIORITY = //
+ MESSAGES.addField("priority", DBType.INTEGER); //$NON-NLS-1$
+
+ public static final IDBIndex INDEX_MESSAGES_PK = //
+ MESSAGES.addIndex(IDBIndex.Type.PRIMARY_KEY, MESSAGES_ID);
+
+ /**
+ * Queries
+ */
+ public static final String QUERY = "SELECT " + DESTINATIONS_TYPE + ", " + MESSAGES_ID + ", " + MESSAGES_PRIORITY //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ + " FROM " + DESTINATIONS + ", " + MESSAGES + " WHERE " + DESTINATIONS_NAME + "=" + MESSAGES_DESTINATION //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ + " AND " + DESTINATIONS_NAME + "=?"; //$NON-NLS-1$ //$NON-NLS-2$
+
+ private JMSSchema()
+ {
+ super("JMS"); //$NON-NLS-1$
+ }
+
+ static
+ {
+ INSTANCE.lock();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/bundle/OM.java
new file mode 100644
index 0000000000..ddd0ad9f94
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/internal/jdbc/bundle/OM.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server.internal.jdbc.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.jms.server.jdbc"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/jdbc/JDBCUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/jdbc/JDBCUtil.java
new file mode 100644
index 0000000000..9d19da7f50
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server.jdbc/src/org/eclipse/net4j/jms/server/jdbc/JDBCUtil.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server.jdbc;
+
+import org.eclipse.net4j.db.DBUtil;
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.jms.server.internal.jdbc.JDBCStore;
+import org.eclipse.net4j.jms.server.internal.jdbc.bundle.OM;
+
+import javax.sql.DataSource;
+
+import java.util.Properties;
+
+/**
+ * @author Eike Stepper
+ */
+public final class JDBCUtil
+{
+ private JDBCUtil()
+ {
+ }
+
+ public static IStore getStore(IDBAdapter dbAdapter, DataSource dataSource, String instanceID)
+ {
+ JDBCStore store = new JDBCStore(dbAdapter, dataSource);
+ store.initDatabase(instanceID);
+ return store;
+ }
+
+ public static IStore getStore()
+ {
+ Properties properties = OM.BUNDLE.getConfigProperties();
+ String adapterName = properties.getProperty("store.adapterName", "derby-embedded"); //$NON-NLS-1$ //$NON-NLS-2$
+ IDBAdapter dbAdapter = DBUtil.getDBAdapter(adapterName);
+ DataSource dataSource = DBUtil.createDataSource(properties, "datasource"); //$NON-NLS-1$
+ String instanceID = properties.getProperty("store.instanceID", "00000000"); //$NON-NLS-1$ //$NON-NLS-2$
+ return getStore(dbAdapter, dataSource, instanceID);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.options b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.options
new file mode 100644
index 0000000000..1fd37aa77e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.options
@@ -0,0 +1,6 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.jms.server/debug = true
+
+org.eclipse.net4j.jms.server/debug.protocol = true
+org.eclipse.net4j.jms.server/debug.store = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.project b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.project
new file mode 100644
index 0000000000..1038549765
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.jms.server</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..08d1ab430d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:57:30 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..396f50b675
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.net4j.jms.server
+Bundle-Version: 4.0.100.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.net4j.jms.internal.server.bundle.OM
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.jms;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Import-Package: javax.jms;version="[1.1.0,2.0.0)"
+Export-Package: org.eclipse.net4j.jms.internal.server;version="4.0.100";x-friends:="org.eclipse.net4j.jms.server.jdbc,org.eclipse.net4j.jms.tests",
+ org.eclipse.net4j.jms.internal.server.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.jms.internal.server.messages;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.jms.internal.server.protocol;version="4.0.100";x-friends:="org.eclipse.net4j.jms.server.jdbc,org.eclipse.net4j.jms.tests",
+ org.eclipse.net4j.jms.internal.server.protocol.admin;version="4.0.100";x-friends:="org.eclipse.net4j.jms.server.jdbc,org.eclipse.net4j.jms.tests",
+ org.eclipse.net4j.jms.internal.server.store;version="4.0.100";x-friends:="org.eclipse.net4j.jms.server.jdbc,org.eclipse.net4j.jms.tests",
+ org.eclipse.net4j.jms.server;version="4.0.100"
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/build.properties
new file mode 100644
index 0000000000..152299f8f0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/plugin.properties
new file mode 100644
index 0000000000..e5bdacfa85
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j JMS Provider Server
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/Server.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/Server.java
new file mode 100644
index 0000000000..4e95accebc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/Server.java
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server;
+
+import org.eclipse.net4j.internal.jms.ConnectionFactoryImpl;
+import org.eclipse.net4j.internal.jms.JMSDestination;
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.jms.server.IDestination;
+import org.eclipse.net4j.jms.server.IServer;
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+import org.eclipse.net4j.util.HexUtil;
+import org.eclipse.net4j.util.concurrent.NonBlockingLongCounter;
+import org.eclipse.net4j.util.concurrent.QueueWorker;
+import org.eclipse.net4j.util.om.OMPlatform;
+
+import javax.jms.Destination;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Eike Stepper
+ */
+public class Server extends QueueWorker<MessageImpl> implements IServer
+{
+ public static final Server INSTANCE = new Server();
+
+ private static final boolean REBIND_DESTINATIONS = true;
+
+ private NonBlockingLongCounter messageIDCounter = new NonBlockingLongCounter();
+
+ private NonBlockingLongCounter consumerIDCounter = new NonBlockingLongCounter();
+
+ private IStore store = null;
+
+ private Context jndiContext;
+
+ private ConcurrentMap<String, ServerDestination> destinations = new ConcurrentHashMap<String, ServerDestination>();
+
+ private Set<ServerConnection> connections = new HashSet<ServerConnection>();
+
+ private ConcurrentMap<Long, ServerConsumer> consumers = new ConcurrentHashMap<Long, ServerConsumer>();
+
+ public Server()
+ {
+ }
+
+ public IStore getStore()
+ {
+ return store;
+ }
+
+ public void setStore(IStore store)
+ {
+ this.store = store;
+ }
+
+ public IDestination createDestination(String name, IDestination.Type type)
+ {
+ ServerDestination destination = new ServerDestination(name, type);
+ ServerDestination existing = destinations.putIfAbsent(name, destination);
+ if (existing != null)
+ {
+ throw new IllegalStateException("Destination " + type + " " + name + " does already exist"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+
+ IStoreTransaction transaction = store.startTransaction();
+ transaction.destinationAdded(destination);
+ store.commitTransaction(transaction);
+
+ try
+ {
+ destination.bind(jndiContext, REBIND_DESTINATIONS);
+ }
+ catch (NamingException ex)
+ {
+ OM.LOG.error(ex);
+ destinations.remove(name);
+ destination = null;
+ }
+
+ return destination;
+ }
+
+ public ServerDestination getDestination(String name)
+ {
+ return destinations.get(name);
+ }
+
+ public ServerDestination getServerDestination(Destination jmsDestination)
+ {
+ String name = ((JMSDestination)jmsDestination).getName();
+ ServerDestination destination = destinations.get(name);
+ if (destination == null)
+ {
+ OM.LOG.error(Messages.getString("Server.3") + name); //$NON-NLS-1$
+ return null;
+ }
+
+ return destination;
+ }
+
+ public ServerConnection logon(String userName, String password)
+ {
+ ServerConnection connection = new ServerConnection(this, userName);
+ synchronized (connections)
+ {
+ connections.add(connection);
+ }
+
+ return connection;
+ }
+
+ public ServerConsumer createConsumer(ServerDestination destination, String messageSelector, boolean noLocal,
+ boolean durable)
+ {
+ long consumerID = consumerIDCounter.increment();
+ ServerConsumer consumer = new ServerConsumer(consumerID, destination, messageSelector, noLocal, durable);
+ consumers.put(consumer.getID(), consumer);
+ return consumer;
+ }
+
+ public ServerConsumer getConsumer(long consumerID)
+ {
+ return consumers.get(consumerID);
+ }
+
+ public String[] handleClientMessages(MessageImpl[] messages)
+ {
+ IStoreTransaction transaction = store.startTransaction();
+ String[] messageIDs = handleClientMessagesInTransaction(transaction, messages);
+ store.commitTransaction(transaction);
+ return messageIDs;
+ }
+
+ public String[] handleClientMessagesInTransaction(IStoreTransaction transaction, MessageImpl[] messages)
+ {
+ String[] messageIDs = new String[messages.length];
+ for (int i = 0; i < messages.length; i++)
+ {
+ MessageImpl message = messages[i];
+ if (getServerDestination(message.getJMSDestination()) == null)
+ {
+ return null;
+ }
+
+ messageIDs[i] = "ID:NET4J:" + HexUtil.longToHex(messageIDCounter.increment()); //$NON-NLS-1$
+ message.setJMSMessageID(messageIDs[i]);
+ }
+
+ for (MessageImpl message : messages)
+ {
+ transaction.messageReceived(message);
+ addWork(message);
+ }
+
+ return messageIDs;
+ }
+
+ @Override
+ protected String getThreadName()
+ {
+ return "jms-server"; //$NON-NLS-1$
+ }
+
+ @Override
+ protected void work(WorkContext context, MessageImpl message)
+ {
+ ServerDestination destination = getServerDestination(message.getJMSDestination());
+ IStoreTransaction transaction = store.startTransaction();
+ destination.handleClientMessage(transaction, message);
+ store.commitTransaction(transaction);
+ }
+
+ @Override
+ protected void doBeforeActivate() throws Exception
+ {
+ super.doBeforeActivate();
+ if (store == null)
+ {
+ throw new IllegalStateException("store == null"); //$NON-NLS-1$
+ }
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ String name = OMPlatform.INSTANCE.getProperty("net4j.jms.connection.factory.name", "net4j.jms.ConnectionFactory"); //$NON-NLS-1$ //$NON-NLS-2$
+ String type = OMPlatform.INSTANCE.getProperty("net4j.jms.connector.type", "tcp"); //$NON-NLS-1$ //$NON-NLS-2$
+ String desc = OMPlatform.INSTANCE.getProperty("net4j.jms.connector.description", "localhost"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ jndiContext = new InitialContext();
+ jndiContext.rebind(name, new ConnectionFactoryImpl(type, desc));
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ synchronized (connections)
+ {
+ for (ServerConnection connection : connections)
+ {
+ try
+ {
+ connection.close();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+
+ jndiContext.close();
+ jndiContext = null;
+ super.doDeactivate();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConnection.java
new file mode 100644
index 0000000000..b073bb1d68
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConnection.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server;
+
+import org.eclipse.net4j.jms.internal.server.protocol.JMSServerProtocol;
+import org.eclipse.net4j.jms.server.IConnection;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerConnection implements IConnection
+{
+ private Server server;
+
+ private String userName;
+
+ private List<ServerSession> sessions = new ArrayList<ServerSession>(0);
+
+ private JMSServerProtocol protocol;
+
+ public ServerConnection(Server server, String userName)
+ {
+ this.server = server;
+ this.userName = userName;
+ }
+
+ public Server getServer()
+ {
+ return server;
+ }
+
+ public String getUserName()
+ {
+ return userName;
+ }
+
+ public JMSServerProtocol getProtocol()
+ {
+ return protocol;
+ }
+
+ public void setProtocol(JMSServerProtocol protocol)
+ {
+ this.protocol = protocol;
+ }
+
+ public ServerSession openSession(int sessionID)
+ {
+ ServerSession session = new ServerSession(this, sessionID);
+ synchronized (sessions)
+ {
+ while (sessionID >= sessions.size())
+ {
+ sessions.add(null);
+ }
+
+ sessions.set(sessionID, session);
+ }
+
+ return session;
+ }
+
+ public ServerSession getSession(int sessionID)
+ {
+ return sessions.get(sessionID);
+ }
+
+ public ServerSession[] getSessions()
+ {
+ List<ServerSession> result = new ArrayList<ServerSession>(sessions.size());
+ synchronized (sessions)
+ {
+ for (ServerSession session : sessions)
+ {
+ if (session != null)
+ {
+ result.add(session);
+ }
+ }
+ }
+
+ return result.toArray(new ServerSession[result.size()]);
+ }
+
+ public void close()
+ {
+ protocol.getChannel().close();
+ }
+
+ protected boolean removeSession(ServerSession session)
+ {
+ synchronized (sessions)
+ {
+ int sessionID = session.getID();
+ if (sessions.get(sessionID) == session)
+ {
+ sessions.set(sessionID, null);
+ return true;
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConsumer.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConsumer.java
new file mode 100644
index 0000000000..fd84f292cd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerConsumer.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.protocol.JMSServerMessageRequest;
+import org.eclipse.net4j.jms.internal.server.protocol.JMSServerProtocol;
+import org.eclipse.net4j.jms.server.IServerConsumer;
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+import org.eclipse.net4j.util.io.IOUtil;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerConsumer implements IServerConsumer
+{
+ private ServerSession session;
+
+ private long id;
+
+ private ServerDestination destination;
+
+ private String messageSelector;
+
+ private boolean noLocal;
+
+ private boolean durable;
+
+ private ConcurrentMap<String, MessageImpl> messages = new ConcurrentHashMap<String, MessageImpl>();
+
+ public ServerConsumer(long id, ServerDestination destination, String messageSelector, boolean noLocal, boolean durable)
+ {
+ this.id = id;
+ this.destination = destination;
+ this.messageSelector = messageSelector;
+ this.noLocal = noLocal;
+ this.durable = durable;
+ }
+
+ public ServerSession getSession()
+ {
+ return session;
+ }
+
+ public void setSession(ServerSession session)
+ {
+ this.session = session;
+ }
+
+ public long getID()
+ {
+ return id;
+ }
+
+ public ServerDestination getDestination()
+ {
+ return destination;
+ }
+
+ public String getMessageSelector()
+ {
+ return messageSelector;
+ }
+
+ public boolean isNoLocal()
+ {
+ return noLocal;
+ }
+
+ public JMSServerProtocol getProtocol()
+ {
+ return session.getConnection().getProtocol();
+ }
+
+ public boolean isDurable()
+ {
+ return durable;
+ }
+
+ public boolean handleClientMessage(IStoreTransaction transaction, MessageImpl message)
+ {
+ try
+ {
+ String messageID = message.getJMSMessageID();
+ synchronized (messages)
+ {
+ messages.put(messageID, message);
+ }
+
+ new JMSServerMessageRequest(getProtocol(), session.getID(), id, message).sendAsync();
+ transaction.messageSent(message, id);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ return false;
+ }
+ }
+
+ public void handleAcknowledge(IStoreTransaction transaction)
+ {
+ synchronized (messages)
+ {
+ if (messages.isEmpty())
+ {
+ return;
+ }
+
+ for (MessageImpl message : messages.values())
+ {
+ transaction.messageAcknowledged(message, id);
+ IOUtil.OUT().println("\nMessage acknowledged: " + message.getJMSMessageID() + " (consumer=" + id + ")\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+
+ messages.clear();
+ }
+ }
+
+ public void handleRecover(IStoreTransaction transaction)
+ {
+ synchronized (messages)
+ {
+ if (messages.isEmpty())
+ {
+ return;
+ }
+
+ for (MessageImpl message : messages.values())
+ {
+ IOUtil.OUT().println("\nRecovering message: " + message.getJMSMessageID() + " (consumer=" + id + ")\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ session.getConnection().getServer().addWork(message);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerDestination.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerDestination.java
new file mode 100644
index 0000000000..4ea2d66dab
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerDestination.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server;
+
+import org.eclipse.net4j.internal.jms.DestinationImpl;
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.QueueImpl;
+import org.eclipse.net4j.internal.jms.TopicImpl;
+import org.eclipse.net4j.jms.server.IDestination;
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+import org.eclipse.net4j.util.concurrent.RoundRobinList;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+import java.util.Iterator;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerDestination implements IDestination
+{
+ private String name;
+
+ private Type type;
+
+ private RoundRobinList<ServerConsumer> consumers = new RoundRobinList<ServerConsumer>();
+
+ public ServerDestination(String name, Type type)
+ {
+ this.name = name;
+ this.type = type;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public Type getType()
+ {
+ return type;
+ }
+
+ public DestinationImpl bind(Context context, boolean rebind) throws NamingException
+ {
+ DestinationImpl destination = type == Type.QUEUE ? new QueueImpl(name) : new TopicImpl(name);
+ if (rebind)
+ {
+ context.rebind(name, destination);
+ }
+ else
+ {
+ context.bind(name, destination);
+ }
+
+ return destination;
+ }
+
+ public boolean addConsumer(ServerConsumer consumer)
+ {
+ if (consumer.isDurable())
+ {
+ IStore store = Server.INSTANCE.getStore();
+ IStoreTransaction transaction = store.startTransaction();
+ transaction.consumerAdded(consumer);
+ store.commitTransaction(transaction);
+ }
+
+ return consumers.add(consumer);
+ }
+
+ public boolean removeConsumer(final long consumerID)
+ {
+ final boolean[] modified = { false };
+ consumers.executeWrites(new Runnable()
+ {
+ public void run()
+ {
+ for (Iterator<ServerConsumer> it = consumers.iterator(); it.hasNext();)
+ {
+ ServerConsumer consumer = it.next();
+ if (consumer.getID() == consumerID)
+ {
+ it.remove();
+ modified[0] = true;
+ return;
+ }
+ }
+ }
+ });
+
+ return modified[0];
+ }
+
+ /**
+ * Called by worker thread of the server
+ */
+ public void handleClientMessage(IStoreTransaction transaction, MessageImpl message)
+ {
+ if (type == Type.QUEUE)
+ {
+ ServerConsumer consumer = consumers.element();
+ if (consumer != null)
+ {
+ consumer.handleClientMessage(transaction, message);
+ }
+ }
+ else
+ {
+ ServerConsumer[] consumers = this.consumers.toArray(new ServerConsumer[0]);
+ for (ServerConsumer consumer : consumers)
+ {
+ consumer.handleClientMessage(transaction, message);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerSession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerSession.java
new file mode 100644
index 0000000000..255c03ff26
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/ServerSession.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server;
+
+import org.eclipse.net4j.internal.jms.DestinationImpl;
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.jms.server.ISession;
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import java.text.MessageFormat;
+import java.util.Collection;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Eike Stepper
+ */
+public class ServerSession extends Lifecycle implements ISession
+{
+ private ServerConnection connection;
+
+ private int id;
+
+ private ConcurrentMap<Long, ServerConsumer> consumers = new ConcurrentHashMap<Long, ServerConsumer>();
+
+ public ServerSession(ServerConnection connection, int id)
+ {
+ this.connection = connection;
+ this.id = id;
+ }
+
+ public ServerConnection getConnection()
+ {
+ return connection;
+ }
+
+ public int getID()
+ {
+ return id;
+ }
+
+ public long registerConsumer(DestinationImpl dest, String messageSelector, boolean noLocal, boolean durable)
+ {
+ Server server = connection.getServer();
+ String name = dest.getName();
+ ServerDestination destination = server.getDestination(name);
+ if (destination == null)
+ {
+ OM.LOG.error(MessageFormat.format(Messages.getString("ServerSession_0"), name)); //$NON-NLS-1$
+ return -1;
+ }
+
+ ServerConsumer consumer = server.createConsumer(destination, messageSelector, noLocal, durable);
+ consumer.setSession(this);
+ consumers.put(consumer.getID(), consumer);
+ destination.addConsumer(consumer);
+ return consumer.getID();
+ }
+
+ public void handleAcknowledge()
+ {
+ IStore store = connection.getServer().getStore();
+ IStoreTransaction transaction = store.startTransaction();
+ handleAcknowledgeInTransaction(transaction);
+ store.commitTransaction(transaction);
+ }
+
+ public void handleAcknowledgeInTransaction(IStoreTransaction transaction)
+ {
+ for (ServerConsumer consumer : consumers.values())
+ {
+ consumer.handleAcknowledge(transaction);
+ }
+ }
+
+ public void handleRecover()
+ {
+ IStore store = connection.getServer().getStore();
+ IStoreTransaction transaction = store.startTransaction();
+ Collection<ServerConsumer> values = consumers.values();
+ for (ServerConsumer consumer : values)
+ {
+ consumer.handleRecover(transaction);
+ }
+
+ store.commitTransaction(transaction);
+ }
+
+ public String[] handleCommit(MessageImpl[] messages)
+ {
+ Server server = connection.getServer();
+ IStore store = server.getStore();
+
+ IStoreTransaction transaction = store.startTransaction();
+ handleAcknowledgeInTransaction(transaction);
+ String[] messageIDs = server.handleClientMessagesInTransaction(transaction, messages);
+ store.commitTransaction(transaction);
+
+ return messageIDs;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/bundle/OM.java
new file mode 100644
index 0000000000..0dc7a59890
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/bundle/OM.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.bundle;
+
+import org.eclipse.net4j.jms.internal.server.Server;
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.jms.server"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_PROTOCOL = DEBUG.tracer("protocol"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_STORE = DEBUG.tracer("store"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ static void start() throws Exception
+ {
+ Server.INSTANCE.activate();
+ }
+
+ static void stop() throws Exception
+ {
+ Server.INSTANCE.deactivate();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/Messages.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/Messages.java
new file mode 100644
index 0000000000..9dc5329eb5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/Messages.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Victor Roldan Betancort - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.net4j.jms.internal.server.messages;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.net4j.jms.internal.server.messages.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/messages.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/messages.properties
new file mode 100644
index 0000000000..0755149def
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/messages/messages.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Victor Roldan Betancort - initial API and implementation
+# Eike Stepper - maintenance
+
+JMSAcknowledgeIndication_0=Session {0} not found. Acknowledgement discarded.
+JMSCommitIndication_0=Session {0} not found
+JMSLogonIndication_0=Access to JMS server denied
+JMSRecoverIndication_0=Session {0} not found
+JMSRollbackIndication_0=Session {0} not found
+Server.3=Invalid destination:
+ServerSession_0=Destination not found: {0}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSAcknowledgeIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSAcknowledgeIndication.java
new file mode 100644
index 0000000000..d79d8ed15c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSAcknowledgeIndication.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.ServerSession;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSAcknowledgeIndication extends Indication
+{
+ public JMSAcknowledgeIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_ACKNOWLEDGE);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ ServerSession session = connection.getSession(sessionID);
+ if (session == null)
+ {
+ OM.LOG.info(MessageFormat.format(Messages.getString("JMSAcknowledgeIndication_0"), sessionID)); //$NON-NLS-1$
+ return;
+ }
+
+ session.handleAcknowledge();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSClientMessageIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSClientMessageIndication.java
new file mode 100644
index 0000000000..e31cd262d2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSClientMessageIndication.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.Server;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSClientMessageIndication extends IndicationWithResponse
+{
+ private String messageID;
+
+ public JMSClientMessageIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_CLIENT_MESSAGE);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ MessageImpl[] messages = { MessageUtil.read(in) };
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ Server server = connection.getServer();
+ String[] ids = server.handleClientMessages(messages);
+ if (ids != null && ids.length != 0)
+ {
+ messageID = ids[0];
+ }
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(messageID);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSCommitIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSCommitIndication.java
new file mode 100644
index 0000000000..6c11c01189
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSCommitIndication.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.ServerSession;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSCommitIndication extends IndicationWithResponse
+{
+ private String[] messageIDs;
+
+ public JMSCommitIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_COMMIT);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+ int size = in.readInt();
+ MessageImpl[] messages = new MessageImpl[size];
+ for (int i = 0; i < messages.length; i++)
+ {
+ messages[i] = MessageUtil.read(in);
+ }
+
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ ServerSession session = connection.getSession(sessionID);
+ if (session == null)
+ {
+ OM.LOG.warn(MessageFormat.format(Messages.getString("JMSCommitIndication_0"), sessionID)); //$NON-NLS-1$
+ return;
+ }
+
+ messageIDs = session.handleCommit(messages);
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ if (messageIDs == null)
+ {
+ out.writeInt(-1);
+ }
+ else
+ {
+ out.writeInt(messageIDs.length);
+ for (String messageID : messageIDs)
+ {
+ out.writeString(messageID);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSLogonIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSLogonIndication.java
new file mode 100644
index 0000000000..849b7efa83
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSLogonIndication.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.Server;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSLogonIndication extends IndicationWithResponse
+{
+ private boolean ok;
+
+ public JMSLogonIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_LOGON);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ String userName = in.readString();
+ String password = in.readString();
+ ServerConnection connection = Server.INSTANCE.logon(userName, password);
+ if (connection == null)
+ {
+ OM.LOG.error(Messages.getString("JMSLogonIndication_0")); //$NON-NLS-1$
+ return;
+ }
+
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ connection.setProtocol(protocol);
+ protocol.setInfraStructure(connection);
+ ok = true;
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeBoolean(ok);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSOpenSessionIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSOpenSessionIndication.java
new file mode 100644
index 0000000000..080d003211
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSOpenSessionIndication.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.ServerSession;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSOpenSessionIndication extends IndicationWithResponse
+{
+ private boolean ok;
+
+ public JMSOpenSessionIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_OPEN_SESSION);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ ServerSession session = connection.openSession(sessionID);
+ if (session != null)
+ {
+ ok = true;
+ }
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeBoolean(ok);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRecoverIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRecoverIndication.java
new file mode 100644
index 0000000000..8b4ec05341
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRecoverIndication.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.ServerSession;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSRecoverIndication extends IndicationWithResponse
+{
+ public JMSRecoverIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_RECOVER);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ ServerSession session = connection.getSession(sessionID);
+ if (session == null)
+ {
+ OM.LOG.warn(MessageFormat.format(Messages.getString("JMSRecoverIndication_0"), sessionID)); //$NON-NLS-1$
+ return;
+ }
+
+ session.handleRecover();
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRegisterConsumerIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRegisterConsumerIndication.java
new file mode 100644
index 0000000000..658aaec0f9
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRegisterConsumerIndication.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.internal.jms.DestinationImpl;
+import org.eclipse.net4j.internal.jms.util.DestinationUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.ServerSession;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSRegisterConsumerIndication extends IndicationWithResponse
+{
+ private long consumerID;
+
+ public JMSRegisterConsumerIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_REGISTER_CONSUMER);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+ DestinationImpl destination = DestinationUtil.read(in);
+ String messageSelector = in.readString();
+ boolean noLocal = in.readBoolean();
+ boolean durable = in.readBoolean();
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ ServerSession session = connection.getSession(sessionID);
+ consumerID = session.registerConsumer(destination, messageSelector, noLocal, durable);
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(consumerID);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRollbackIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRollbackIndication.java
new file mode 100644
index 0000000000..f801774ac1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSRollbackIndication.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.jms.internal.server.ServerSession;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.internal.server.messages.Messages;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSRollbackIndication extends IndicationWithResponse
+{
+ public JMSRollbackIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_ROLLBACK);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+ JMSServerProtocol protocol = (JMSServerProtocol)getProtocol();
+ ServerConnection connection = protocol.getInfraStructure();
+ ServerSession session = connection.getSession(sessionID);
+ if (session == null)
+ {
+ OM.LOG.warn(MessageFormat.format(Messages.getString("JMSRollbackIndication_0"), sessionID)); //$NON-NLS-1$
+ return;
+ }
+
+ session.handleRecover();
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeBoolean(true);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerMessageRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerMessageRequest.java
new file mode 100644
index 0000000000..24f50d231b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerMessageRequest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSServerMessageRequest extends Request
+{
+ private int sessionID;
+
+ private long consumerID;
+
+ private MessageImpl message;
+
+ public JMSServerMessageRequest(JMSServerProtocol protocol, int sessionID, long consumerID, MessageImpl message)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_SERVER_MESSAGE);
+ this.sessionID = sessionID;
+ this.consumerID = consumerID;
+ this.message = message;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ out.writeLong(consumerID);
+ MessageUtil.write(out, message);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocol.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocol.java
new file mode 100644
index 0000000000..2f5f9be1e2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocol.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.jms.internal.server.ServerConnection;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.signal.SignalReactor;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSServerProtocol extends SignalProtocol<ServerConnection>
+{
+ public JMSServerProtocol()
+ {
+ super(JMSProtocolConstants.PROTOCOL_NAME);
+ }
+
+ @Override
+ protected SignalReactor createSignalReactor(short signalID)
+ {
+ switch (signalID)
+ {
+ case JMSProtocolConstants.SIGNAL_SYNC:
+ return new JMSSyncIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_LOGON:
+ return new JMSLogonIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_OPEN_SESSION:
+ return new JMSOpenSessionIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_REGISTER_CONSUMER:
+ return new JMSRegisterConsumerIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_CLIENT_MESSAGE:
+ return new JMSClientMessageIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_ACKNOWLEDGE:
+ return new JMSAcknowledgeIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_RECOVER:
+ return new JMSRecoverIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_COMMIT:
+ return new JMSCommitIndication(this);
+
+ case JMSProtocolConstants.SIGNAL_ROLLBACK:
+ return new JMSRollbackIndication(this);
+
+ default:
+ return super.createSignalReactor(signalID);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocolFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocolFactory.java
new file mode 100644
index 0000000000..068a09211f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSServerProtocolFactory.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+import org.eclipse.spi.net4j.ServerProtocolFactory;
+
+/**
+ * @author Eike Stepper
+ */
+public final class JMSServerProtocolFactory extends ServerProtocolFactory
+{
+ public static final String TYPE = JMSProtocolConstants.PROTOCOL_NAME;
+
+ public JMSServerProtocolFactory()
+ {
+ super(TYPE);
+ }
+
+ public JMSServerProtocol create(String description)
+ {
+ return new JMSServerProtocol();
+ }
+
+ public static JMSServerProtocol get(IManagedContainer container, String description)
+ {
+ return (JMSServerProtocol)container.getElement(PRODUCT_GROUP, TYPE, description);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSSyncIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSSyncIndication.java
new file mode 100644
index 0000000000..9260ed6381
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/JMSSyncIndication.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSSyncIndication extends IndicationWithResponse
+{
+ public JMSSyncIndication(JMSServerProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_SYNC);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeLong(System.currentTimeMillis());
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocol.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocol.java
new file mode 100644
index 0000000000..7fbeccd8dd
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocol.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol.admin;
+
+import org.eclipse.net4j.jms.JMSAdminProtocolConstants;
+import org.eclipse.net4j.jms.server.IServer;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.signal.SignalReactor;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSAdminServerProtocol extends SignalProtocol<Object>
+{
+ public JMSAdminServerProtocol()
+ {
+ super(JMSAdminProtocolConstants.PROTOCOL_NAME);
+ }
+
+ @Override
+ protected SignalReactor createSignalReactor(short signalID)
+ {
+ switch (signalID)
+ {
+ case JMSAdminProtocolConstants.SIGNAL_CREATE_DESTINATION:
+ return new JMSCreateDestinationIndication(this);
+
+ default:
+ return super.createSignalReactor(signalID);
+ }
+ }
+
+ public IServer getServer()
+ {
+ return IServer.INSTANCE;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocolFactory.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocolFactory.java
new file mode 100644
index 0000000000..1351ac0793
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSAdminServerProtocolFactory.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol.admin;
+
+import org.eclipse.net4j.jms.JMSAdminProtocolConstants;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+import org.eclipse.spi.net4j.ServerProtocolFactory;
+
+/**
+ * @author Eike Stepper
+ */
+public final class JMSAdminServerProtocolFactory extends ServerProtocolFactory
+{
+ public static final String TYPE = JMSAdminProtocolConstants.PROTOCOL_NAME;
+
+ public JMSAdminServerProtocolFactory()
+ {
+ super(TYPE);
+ }
+
+ public JMSAdminServerProtocol create(String description)
+ {
+ return new JMSAdminServerProtocol();
+ }
+
+ public static JMSAdminServerProtocol get(IManagedContainer container, String description)
+ {
+ return (JMSAdminServerProtocol)container.getElement(PRODUCT_GROUP, TYPE, description);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSCreateDestinationIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSCreateDestinationIndication.java
new file mode 100644
index 0000000000..89bbd3539e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/protocol/admin/JMSCreateDestinationIndication.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.protocol.admin;
+
+import org.eclipse.net4j.jms.JMSAdminProtocolConstants;
+import org.eclipse.net4j.jms.server.IDestination;
+import org.eclipse.net4j.jms.server.IDestination.Type;
+import org.eclipse.net4j.jms.server.IServer;
+import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSCreateDestinationIndication extends IndicationWithResponse
+{
+ private boolean ok;
+
+ public JMSCreateDestinationIndication(JMSAdminServerProtocol protocol)
+ {
+ super(protocol, JMSAdminProtocolConstants.SIGNAL_CREATE_DESTINATION);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ byte type = in.readByte();
+ String name = in.readString();
+ JMSAdminServerProtocol protocol = (JMSAdminServerProtocol)getProtocol();
+ IServer server = protocol.getServer();
+ IDestination destination = server.createDestination(name, getDestinationType(type));
+ if (destination != null)
+ {
+ ok = true;
+ }
+ }
+
+ @Override
+ protected void responding(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeBoolean(ok);
+ }
+
+ private Type getDestinationType(byte type)
+ {
+ switch (type)
+ {
+ case JMSAdminProtocolConstants.DESTINATION_TYPE_QUEUE:
+ return IDestination.Type.QUEUE;
+ case JMSAdminProtocolConstants.DESTINATION_TYPE_TOPIC:
+ return IDestination.Type.TOPIC;
+ }
+
+ throw new IllegalArgumentException("type: " + type); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractStore.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractStore.java
new file mode 100644
index 0000000000..49fc030b0f
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractStore.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.store;
+
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class AbstractStore extends Lifecycle implements IStore
+{
+ private String storeType;
+
+ private String instanceID;
+
+ public AbstractStore(String storeType)
+ {
+ this.storeType = storeType;
+ }
+
+ public String getStoreType()
+ {
+ return storeType;
+ }
+
+ public String getInstanceID()
+ {
+ return instanceID;
+ }
+
+ public void setInstanceID(String instanceID)
+ {
+ this.instanceID = instanceID;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractTransaction.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractTransaction.java
new file mode 100644
index 0000000000..cf4c883e4e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/AbstractTransaction.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.store;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.jms.internal.server.ServerConsumer;
+import org.eclipse.net4j.jms.internal.server.ServerDestination;
+import org.eclipse.net4j.jms.internal.server.bundle.OM;
+import org.eclipse.net4j.jms.server.IDestination;
+import org.eclipse.net4j.jms.server.IServerConsumer;
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import javax.jms.Message;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class AbstractTransaction implements IStoreTransaction
+{
+ public static final String[] NO_DESTINATION_NAMES = new String[0];
+
+ public static final long[] NO_CONSUMER_IDS = new long[0];
+
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_STORE, AbstractTransaction.class);
+
+ private AbstractStore store;
+
+ public AbstractTransaction(AbstractStore store)
+ {
+ this.store = store;
+ }
+
+ public AbstractStore getStore()
+ {
+ return store;
+ }
+
+ public String[] getDestinationNames()
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Getting destination names"); //$NON-NLS-1$
+ }
+
+ String[] names = doGetDestinationNames();
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Got destination names " + names); //$NON-NLS-1$
+ }
+
+ return names;
+ }
+
+ public ServerDestination getDestination(String name)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Getting destination " + name); //$NON-NLS-1$
+ }
+
+ ServerDestination destination = doGetDestination(name);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Got destination " + destination); //$NON-NLS-1$
+ }
+
+ return destination;
+ }
+
+ public long[] getConsumerIDs()
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Getting consumer IDs"); //$NON-NLS-1$
+ }
+
+ long[] ids = doGetConsumerIDs();
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Got consumer IDs " + ids); //$NON-NLS-1$
+ }
+
+ return ids;
+ }
+
+ public ServerConsumer getConsumer(long id)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Getting consumer " + id); //$NON-NLS-1$
+ }
+
+ ServerConsumer consumer = doGetConsumer(id);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Got consumer " + consumer); //$NON-NLS-1$
+ }
+
+ return consumer;
+ }
+
+ public void destinationAdded(IDestination destination)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Adding destination " + destination); //$NON-NLS-1$
+ }
+
+ doDestinationAdded((ServerDestination)destination);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Added destination " + destination); //$NON-NLS-1$
+ }
+ }
+
+ public void destinationRemoved(IDestination destination)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Removing destination " + destination); //$NON-NLS-1$
+ }
+
+ doDestinationRemoved((ServerDestination)destination);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Removed destination " + destination); //$NON-NLS-1$
+ }
+ }
+
+ public void consumerAdded(IServerConsumer consumer)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Adding consumer " + consumer); //$NON-NLS-1$
+ }
+
+ doConsumerAdded((ServerConsumer)consumer);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Added consumer " + consumer); //$NON-NLS-1$
+ }
+ }
+
+ public void consumerRemoved(IServerConsumer consumer)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Removing consumer " + consumer); //$NON-NLS-1$
+ }
+
+ doConsumerRemoved((ServerConsumer)consumer);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Removed consumer " + consumer); //$NON-NLS-1$
+ }
+ }
+
+ public void messageReceived(Message message)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Logging received message " + message); //$NON-NLS-1$
+ }
+
+ doMessageReceived((MessageImpl)message);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Logged received message " + message); //$NON-NLS-1$
+ }
+ }
+
+ public void messageSent(Message message, long consumerID)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Logging sent message " + message); //$NON-NLS-1$
+ }
+
+ doMessageSent((MessageImpl)message, consumerID);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Logged sent message " + message); //$NON-NLS-1$
+ }
+ }
+
+ public void messageAcknowledged(Message message, long consumerID)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Logging acknowledged message " + message); //$NON-NLS-1$
+ }
+
+ doMessageAcknowledged((MessageImpl)message, consumerID);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Logged acknowledged message " + message); //$NON-NLS-1$
+ }
+ }
+
+ protected abstract String[] doGetDestinationNames();
+
+ protected abstract ServerDestination doGetDestination(String name);
+
+ protected abstract long[] doGetConsumerIDs();
+
+ protected abstract ServerConsumer doGetConsumer(long id);
+
+ protected abstract void doDestinationAdded(ServerDestination destination);
+
+ protected abstract void doDestinationRemoved(ServerDestination destination);
+
+ protected abstract void doConsumerAdded(ServerConsumer consumer);
+
+ protected abstract void doConsumerRemoved(ServerConsumer consumer);
+
+ protected abstract void doMessageReceived(MessageImpl message);
+
+ protected abstract void doMessageSent(MessageImpl message, long consumerID);
+
+ protected abstract void doMessageAcknowledged(MessageImpl message, long consumerID);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPStore.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPStore.java
new file mode 100644
index 0000000000..f149857ce3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPStore.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.store;
+
+import org.eclipse.net4j.jms.server.IStoreTransaction;
+
+/**
+ * @author Eike Stepper
+ */
+public class NOOPStore extends AbstractStore
+{
+ private static final String STORE_TYPE = "NOOP"; //$NON-NLS-1$
+
+ public NOOPStore()
+ {
+ super(STORE_TYPE);
+ setInstanceID(STORE_TYPE);
+ }
+
+ public IStoreTransaction startTransaction()
+ {
+ return new NOOPTransaction(this);
+ }
+
+ public void commitTransaction(IStoreTransaction transaction)
+ {
+ }
+
+ public void rollbackTransaction(IStoreTransaction transaction)
+ {
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPTransaction.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPTransaction.java
new file mode 100644
index 0000000000..1e99f31740
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/NOOPTransaction.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.store;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.jms.internal.server.ServerConsumer;
+import org.eclipse.net4j.jms.internal.server.ServerDestination;
+
+/**
+ * @author Eike Stepper
+ */
+public class NOOPTransaction extends AbstractTransaction
+{
+ public NOOPTransaction(AbstractStore store)
+ {
+ super(store);
+ }
+
+ @Override
+ protected String[] doGetDestinationNames()
+ {
+ return NO_DESTINATION_NAMES;
+ }
+
+ @Override
+ protected ServerDestination doGetDestination(String name)
+ {
+ return null;
+ }
+
+ @Override
+ protected long[] doGetConsumerIDs()
+ {
+ return NO_CONSUMER_IDS;
+ }
+
+ @Override
+ protected ServerConsumer doGetConsumer(long id)
+ {
+ return null;
+ }
+
+ @Override
+ protected void doDestinationAdded(ServerDestination destination)
+ {
+ }
+
+ @Override
+ protected void doDestinationRemoved(ServerDestination destination)
+ {
+ }
+
+ @Override
+ protected void doConsumerAdded(ServerConsumer consumer)
+ {
+ }
+
+ @Override
+ protected void doConsumerRemoved(ServerConsumer consumer)
+ {
+ }
+
+ @Override
+ protected void doMessageReceived(MessageImpl message)
+ {
+ }
+
+ @Override
+ protected void doMessageSent(MessageImpl message, long consumerID)
+ {
+ }
+
+ @Override
+ protected void doMessageAcknowledged(MessageImpl message, long consumerID)
+ {
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/StoreException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/StoreException.java
new file mode 100644
index 0000000000..a26ac8d570
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/internal/server/store/StoreException.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.internal.server.store;
+
+/**
+ * @author Eike Stepper
+ */
+public class StoreException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public StoreException()
+ {
+ }
+
+ public StoreException(String message)
+ {
+ super(message);
+ }
+
+ public StoreException(Throwable cause)
+ {
+ super(cause);
+ }
+
+ public StoreException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IConnection.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IConnection.java
new file mode 100644
index 0000000000..92e6cb9abf
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IConnection.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IConnection
+{
+ public IServer getServer();
+
+ public String getUserName();
+
+ public ISession openSession(int sessionID);
+
+ public ISession getSession(int sessionID);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IDestination.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IDestination.java
new file mode 100644
index 0000000000..860dbe1699
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IDestination.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IDestination
+{
+ public String getName();
+
+ public Type getType();
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum Type
+ {
+ QUEUE, TOPIC;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServer.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServer.java
new file mode 100644
index 0000000000..1123120044
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServer.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+import org.eclipse.net4j.jms.internal.server.Server;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IServer
+{
+ public static final IServer INSTANCE = Server.INSTANCE;
+
+ public IDestination createDestination(String name, IDestination.Type type);
+
+ public IConnection logon(String userName, String password);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServerConsumer.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServerConsumer.java
new file mode 100644
index 0000000000..401941ddc2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IServerConsumer.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+import org.eclipse.net4j.protocol.IProtocol;
+
+/**
+ * @author Eike Stepper
+ * @since 2.0
+ */
+public interface IServerConsumer
+{
+ public long getID();
+
+ public IDestination getDestination();
+
+ public String getMessageSelector();
+
+ public ISession getSession();
+
+ public IProtocol<?> getProtocol();
+
+ public boolean isNoLocal();
+
+ public boolean isDurable();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/ISession.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/ISession.java
new file mode 100644
index 0000000000..d90a2eb53e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/ISession.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ISession
+{
+ public IConnection getConnection();
+
+ public int getID();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStore.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStore.java
new file mode 100644
index 0000000000..8320f3a822
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStore.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IStore
+{
+ public String getStoreType();
+
+ public String getInstanceID();
+
+ public IStoreTransaction startTransaction();
+
+ public void commitTransaction(IStoreTransaction transaction);
+
+ public void rollbackTransaction(IStoreTransaction transaction);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStoreTransaction.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStoreTransaction.java
new file mode 100644
index 0000000000..0c541b4e1b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/IStoreTransaction.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+import javax.jms.Message;
+
+/**
+ * @author Eike Stepper
+ */
+public interface IStoreTransaction
+{
+ public String[] getDestinationNames();
+
+ /**
+ * @since 2.0
+ */
+ public IDestination getDestination(String name);
+
+ public long[] getConsumerIDs();
+
+ /**
+ * @since 2.0
+ */
+ public IServerConsumer getConsumer(long id);
+
+ /**
+ * @since 2.0
+ */
+ public void destinationAdded(IDestination destination);
+
+ /**
+ * @since 2.0
+ */
+ public void destinationRemoved(IDestination destination);
+
+ /**
+ * @since 2.0
+ */
+ public void consumerAdded(IServerConsumer consumer);
+
+ /**
+ * @since 2.0
+ */
+ public void consumerRemoved(IServerConsumer consumer);
+
+ /**
+ * @since 2.0
+ */
+ public void messageReceived(Message message);
+
+ /**
+ * @since 2.0
+ */
+ public void messageSent(Message message, long consumerID);
+
+ /**
+ * @since 2.0
+ */
+ public void messageAcknowledged(Message message, long consumerID);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/JMSServerUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/JMSServerUtil.java
new file mode 100644
index 0000000000..70d000e798
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.server/src/org/eclipse/net4j/jms/server/JMSServerUtil.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.server;
+
+import org.eclipse.net4j.jms.internal.server.protocol.JMSServerProtocolFactory;
+import org.eclipse.net4j.jms.internal.server.protocol.admin.JMSAdminServerProtocolFactory;
+import org.eclipse.net4j.jms.internal.server.store.NOOPStore;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+/**
+ * @author Eike Stepper
+ */
+public final class JMSServerUtil
+{
+ private JMSServerUtil()
+ {
+ }
+
+ public static void prepareContainer(IManagedContainer container)
+ {
+ container.registerFactory(new JMSServerProtocolFactory());
+ container.registerFactory(new JMSAdminServerProtocolFactory());
+ }
+
+ public static IStore createNOOPStore()
+ {
+ return new NOOPStore();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.project b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.project
new file mode 100644
index 0000000000..417871d1db
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.jms.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..73cb07cd04
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:55:53 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..943e40043d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..fe4c748ace
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..4fc4ff0069
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSSeparatedTest.launch b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSSeparatedTest.launch
new file mode 100644
index 0000000000..b1506d86da
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSSeparatedTest.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.net4j.jms.tests/src/org/eclipse/net4j/jms/tests/JMSSeparatedTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.net4j.jms.tests.JMSSeparatedTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.net4j.jms.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djava.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory&#13;&#10;-Djava.naming.provider.url=rmi://localhost:1199&#13;&#10;-Dnet4j.config=config"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSTest.launch b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSTest.launch
new file mode 100644
index 0000000000..202d555696
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/JMSTest.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.net4j.jms.tests/src/org/eclipse/net4j/jms/tests/JMSTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.net4j.jms.tests.JMSTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.net4j.jms.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djava.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory&#13;&#10;-Djava.naming.provider.url=rmi://localhost:1199&#13;&#10;-Dnet4j.config=config"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..825babc063
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.net4j.jms.tests
+Bundle-Version: 4.0.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j.tcp;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.jms;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.jms.admin;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.jms.server;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.jms.server.jdbc;bundle-version="[4.0.0,5.0.0)"
+Import-Package: javax.jms;version="[1.1.0,2.0.0)",
+ org.eclipse.net4j.db.derby;version="[4.0.0,5.0.0)"
+Export-Package: org.eclipse.net4j.jms.tests;version="4.0.0";x-internal:=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/RMIRegistry.launch b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/RMIRegistry.launch
new file mode 100644
index 0000000000..ed57c0f7a4
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/RMIRegistry.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<mapAttribute key="org.eclipse.debug.core.environmentVariables">
+<mapEntry key="CLASSPATH" value="${workspace_loc}/org.eclipse.net4j.jms.api/lib/jms.jar;${workspace_loc}/org.eclipse.net4j.jms/bin"/>
+</mapAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_property:java.home}/bin/rmiregistry.exe"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="1199"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/org.eclipse.net4j.tests}"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/build.properties
new file mode 100644
index 0000000000..809d1198ed
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/build.properties
@@ -0,0 +1,26 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties,\
+ config/
+src.includes = about.html,\
+ copyright.txt,\
+ JMSSeparatedTest.launch,\
+ JMSTest.launch,\
+ RMIRegistry.launch
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/config/org.eclipse.net4j.jms.server.jdbc.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/config/org.eclipse.net4j.jms.server.jdbc.properties
new file mode 100644
index 0000000000..644309a4db
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/config/org.eclipse.net4j.jms.server.jdbc.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+store.instanceID = TEST0001
+store.dbAdapter = derby
+
+datasource.class = org.apache.derby.jdbc.EmbeddedDataSource
+datasource.databaseName = C:/temp/jmsdb
+datasource.createDatabase = create
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/plugin.properties
new file mode 100644
index 0000000000..f71abbe0a6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j JMS Provider Tests (Experimental)
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSSeparatedTest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSSeparatedTest.java
new file mode 100644
index 0000000000..0f84f27fb2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSSeparatedTest.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.tests;
+
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.db.derby.EmbeddedDerbyAdapter;
+import org.eclipse.net4j.jms.JMSInitialContext;
+import org.eclipse.net4j.jms.admin.IJMSAdmin;
+import org.eclipse.net4j.jms.admin.JMSAdminUtil;
+import org.eclipse.net4j.jms.internal.server.Server;
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.jms.server.JMSServerUtil;
+import org.eclipse.net4j.jms.server.jdbc.JDBCUtil;
+import org.eclipse.net4j.tcp.TCPUtil;
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.container.ManagedContainer;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.PrintLogHandler;
+import org.eclipse.net4j.util.om.trace.PrintTraceHandler;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+public class JMSSeparatedTest
+{
+ public static void main(String[] args) throws Exception
+ {
+ try
+ {
+ Context context = init();
+ ConnectionFactory connectionFactory = (ConnectionFactory)context.lookup("net4j.jms.ConnectionFactory"); //$NON-NLS-1$
+ Destination destination = (Destination)context.lookup("StockTopic"); //$NON-NLS-1$
+
+ Connection connection = connectionFactory.createConnection();
+ Session session = connection.createSession(true, 0);
+
+ MessageProducer publisher = session.createProducer(destination);
+ MessageConsumer subscriber1 = session.createConsumer(destination);
+ MessageConsumer subscriber2 = session.createConsumer(destination);
+ subscriber1.setMessageListener(new MessageLogger("subscriber1")); //$NON-NLS-1$
+ subscriber2.setMessageListener(new MessageLogger("subscriber2")); //$NON-NLS-1$
+
+ connection.start();
+
+ publisher.send(session.createObjectMessage("Message 1")); //$NON-NLS-1$
+ publisher.send(session.createObjectMessage("Message 2")); //$NON-NLS-1$
+ publisher.send(session.createObjectMessage("Message 3")); //$NON-NLS-1$
+ publisher.send(session.createObjectMessage("Message 4")); //$NON-NLS-1$
+
+ session.commit();
+ }
+ finally
+ {
+ ConcurrencyUtil.sleep(500);
+ Server.INSTANCE.deactivate();
+ }
+ }
+
+ private static Context init() throws Exception
+ {
+ OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
+ OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
+ OMPlatform.INSTANCE.setDebugging(true);
+
+ initServer();
+ return initClient();
+ }
+
+ private static void initServer() throws Exception
+ {
+ IDBAdapter.REGISTRY.put(EmbeddedDerbyAdapter.NAME, new EmbeddedDerbyAdapter());
+ IStore store = JDBCUtil.getStore();
+ Server.INSTANCE.setStore(store);
+ Server.INSTANCE.activate();
+
+ IManagedContainer serverContainer = new ManagedContainer();
+ Net4jUtil.prepareContainer(serverContainer);
+ TCPUtil.prepareContainer(serverContainer);
+ JMSServerUtil.prepareContainer(serverContainer);
+
+ TCPUtil.getAcceptor(serverContainer, null);
+ }
+
+ private static Context initClient() throws NamingException
+ {
+ IManagedContainer clientContainer = new ManagedContainer();
+ Net4jUtil.prepareContainer(clientContainer);
+ TCPUtil.prepareContainer(clientContainer);
+
+ IConnector connector = TCPUtil.getConnector(clientContainer, "localhost"); //$NON-NLS-1$
+
+ IJMSAdmin admin = JMSAdminUtil.createAdmin(connector);
+ admin.createQueue("StockQueue"); //$NON-NLS-1$
+ admin.createTopic("StockTopic"); //$NON-NLS-1$
+
+ return new JMSInitialContext(clientContainer);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class MessageLogger implements MessageListener
+ {
+ private String name;
+
+ public MessageLogger(String name)
+ {
+ this.name = name;
+ }
+
+ public void onMessage(Message message)
+ {
+ try
+ {
+ Object object = ((ObjectMessage)message).getObject();
+ IOUtil.OUT().println("\n------> MESSAGE for " + name + ": " + object + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ message.acknowledge();
+ }
+ catch (JMSException ex)
+ {
+ IOUtil.print(ex);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSTest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSTest.java
new file mode 100644
index 0000000000..912c0a047b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms.tests/src/org/eclipse/net4j/jms/tests/JMSTest.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms.tests;
+
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.db.derby.EmbeddedDerbyAdapter;
+import org.eclipse.net4j.jms.JMSInitialContext;
+import org.eclipse.net4j.jms.admin.IJMSAdmin;
+import org.eclipse.net4j.jms.admin.JMSAdminUtil;
+import org.eclipse.net4j.jms.internal.server.Server;
+import org.eclipse.net4j.jms.server.IStore;
+import org.eclipse.net4j.jms.server.JMSServerUtil;
+import org.eclipse.net4j.jms.server.jdbc.JDBCUtil;
+import org.eclipse.net4j.tcp.TCPUtil;
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.container.ManagedContainer;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.PrintLogHandler;
+import org.eclipse.net4j.util.om.trace.PrintTraceHandler;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+import javax.naming.Context;
+
+public class JMSTest
+{
+ public static void main(String[] args) throws Exception
+ {
+ try
+ {
+ Context context = init();
+ ConnectionFactory connectionFactory = (ConnectionFactory)context.lookup("net4j.jms.ConnectionFactory"); //$NON-NLS-1$
+ Destination destination = (Destination)context.lookup("StockTopic"); //$NON-NLS-1$
+
+ Connection connection = connectionFactory.createConnection();
+ Session session = connection.createSession(true, 0);
+
+ MessageProducer publisher = session.createProducer(destination);
+ MessageConsumer subscriber1 = session.createConsumer(destination);
+ MessageConsumer subscriber2 = session.createConsumer(destination);
+ subscriber1.setMessageListener(new MessageLogger("subscriber1")); //$NON-NLS-1$
+ subscriber2.setMessageListener(new MessageLogger("subscriber2")); //$NON-NLS-1$
+
+ connection.start();
+
+ publisher.send(session.createObjectMessage("Message 1")); //$NON-NLS-1$
+ publisher.send(session.createObjectMessage("Message 2")); //$NON-NLS-1$
+ publisher.send(session.createObjectMessage("Message 3")); //$NON-NLS-1$
+ publisher.send(session.createObjectMessage("Message 4")); //$NON-NLS-1$
+
+ session.commit();
+ }
+ finally
+ {
+ ConcurrencyUtil.sleep(500);
+ Server.INSTANCE.deactivate();
+ }
+ }
+
+ private static Context init() throws Exception
+ {
+ OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
+ OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
+ OMPlatform.INSTANCE.setDebugging(true);
+
+ IDBAdapter.REGISTRY.put(EmbeddedDerbyAdapter.NAME, new EmbeddedDerbyAdapter());
+ IStore store = JDBCUtil.getStore();
+ Server.INSTANCE.setStore(store);
+ Server.INSTANCE.activate();
+
+ IManagedContainer container = new ManagedContainer();
+ Net4jUtil.prepareContainer(container);
+ TCPUtil.prepareContainer(container);
+ JMSServerUtil.prepareContainer(container);
+
+ TCPUtil.getAcceptor(container, null);
+ IConnector connector = TCPUtil.getConnector(container, "localhost"); //$NON-NLS-1$
+
+ IJMSAdmin admin = JMSAdminUtil.createAdmin(connector);
+ admin.createQueue("StockQueue"); //$NON-NLS-1$
+ admin.createTopic("StockTopic"); //$NON-NLS-1$
+
+ return new JMSInitialContext(container);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class MessageLogger implements MessageListener
+ {
+ private String name;
+
+ public MessageLogger(String name)
+ {
+ this.name = name;
+ }
+
+ public void onMessage(Message message)
+ {
+ try
+ {
+ Object object = ((ObjectMessage)message).getObject();
+ IOUtil.OUT().println("\n------> MESSAGE for " + name + ": " + object + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ message.acknowledge();
+ }
+ catch (JMSException ex)
+ {
+ IOUtil.print(ex);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.classpath b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.options b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.options
new file mode 100644
index 0000000000..f67a398eae
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.options
@@ -0,0 +1,5 @@
+# Debugging and tracing options
+
+org.eclipse.net4j.jms/debug = true
+
+org.eclipse.net4j.jms/debug.protocol = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.project b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.project
new file mode 100644
index 0000000000..0cb927d9c7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.net4j.jms</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..6e23520ec5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:53:34 CEST 2011
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b28293508e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..4343e2f963
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..2f50f36c0c
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..f8d0a0660e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..c6b96bb45e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.examples.installer/examples/jms/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..cd613307b6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.net4j.jms
+Bundle-Version: 4.0.100.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.net4j.internal.jms.bundle.OM$Activator
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.net4j;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Import-Package: javax.jms;version="[1.1.0,2.0.0)"
+Export-Package: org.eclipse.net4j.internal.jms;version="4.0.100",
+ org.eclipse.net4j.internal.jms.bundle;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.internal.jms.messages;version="4.0.100";x-internal:=true,
+ org.eclipse.net4j.internal.jms.protocol;version="4.0.100",
+ org.eclipse.net4j.internal.jms.util;version="4.0.100",
+ org.eclipse.net4j.jms;version="4.0.100"
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/about.html b/plugins/org.eclipse.net4j.examples.installer/examples/jms/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/build.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms/build.properties
new file mode 100644
index 0000000000..152299f8f0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ .options,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties
+src.includes = about.html,\
+ copyright.txt
+
+generateSourceReferences = true
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/copyright.txt b/plugins/org.eclipse.net4j.examples.installer/examples/jms/copyright.txt
new file mode 100644
index 0000000000..0a0f67e6d7
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms/plugin.properties
new file mode 100644
index 0000000000..152d1a6cba
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j JMS Provider
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/BytesMessageImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/BytesMessageImpl.java
new file mode 100644
index 0000000000..afffcf9636
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/BytesMessageImpl.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.BytesMessage;
+import javax.jms.JMSException;
+import javax.jms.Message;
+
+import java.io.IOException;
+
+public class BytesMessageImpl extends MessageImpl implements BytesMessage
+{
+ public long getBodyLength()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public boolean readBoolean()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public byte readByte()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readBytes(byte[] value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readBytes(byte[] value, int length)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public char readChar()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public double readDouble()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public float readFloat()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readInt()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public long readLong()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public short readShort()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public String readUTF()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readUnsignedByte()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readUnsignedShort()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void reset()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeBoolean(boolean value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeByte(byte value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeBytes(byte[] value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeBytes(byte[] value, int offset, int length)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeChar(char value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeDouble(double value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeFloat(float value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeInt(int value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeLong(long value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeObject(Object value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeShort(short value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeUTF(String value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ @Override
+ public void populate(Message source) throws JMSException
+ {
+ super.populate(source);
+ byte[] buffer = new byte[512];
+ BytesMessage bytes = (BytesMessage)source;
+
+ bytes.reset();
+ int count;
+ while ((count = bytes.readBytes(buffer)) != -1)
+ {
+ writeBytes(buffer, 0, count);
+ }
+ }
+
+ @Override
+ public void write(ExtendedDataOutputStream out) throws IOException
+ {
+ super.write(out);
+ }
+
+ @Override
+ public void read(ExtendedDataInputStream in) throws IOException
+ {
+ super.read(in);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionFactoryImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionFactoryImpl.java
new file mode 100644
index 0000000000..763a62e0f2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionFactoryImpl.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+
+import java.io.Serializable;
+import java.rmi.Remote;
+
+public class ConnectionFactoryImpl implements ConnectionFactory, Remote, Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private String connectorType;
+
+ private String connectorDescription;
+
+ private Object transportContainer;
+
+ public ConnectionFactoryImpl(String connectorType, String connectorDescription)
+ {
+ this.connectorType = connectorType;
+ this.connectorDescription = connectorDescription;
+ }
+
+ public String getConnectorType()
+ {
+ return connectorType;
+ }
+
+ public String getConnectorDescription()
+ {
+ return connectorDescription;
+ }
+
+ public Object getTransportContainer()
+ {
+ return transportContainer;
+ }
+
+ public void setTransportContainer(Object transportContainer)
+ {
+ this.transportContainer = transportContainer;
+ }
+
+ public Connection createConnection() throws JMSException
+ {
+ return createConnection(null, null);
+ }
+
+ public Connection createConnection(String userName, String password) throws JMSException
+ {
+ return new ConnectionImpl((IManagedContainer)transportContainer, connectorType, connectorDescription, userName,
+ password);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionImpl.java
new file mode 100644
index 0000000000..a4f30d9496
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionImpl.java
@@ -0,0 +1,407 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.channel.IChannel;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.internal.jms.bundle.OM;
+import org.eclipse.net4j.internal.jms.messages.Messages;
+import org.eclipse.net4j.internal.jms.protocol.JMSClientProtocol;
+import org.eclipse.net4j.internal.jms.protocol.JMSLogonRequest;
+import org.eclipse.net4j.internal.jms.protocol.JMSOpenSessionRequest;
+import org.eclipse.net4j.jms.JMSUtil;
+import org.eclipse.net4j.util.container.Container;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.container.IContainerDelta;
+import org.eclipse.net4j.util.container.IContainerDelta.Kind;
+import org.eclipse.net4j.util.container.IContainerEvent;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.container.LifecycleEventConverter;
+import org.eclipse.net4j.util.container.SingleDeltaContainerEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.ILifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionConsumer;
+import javax.jms.ConnectionMetaData;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.ServerSessionPool;
+import javax.jms.Session;
+import javax.jms.Topic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ConnectionImpl extends Container<Session> implements Connection
+{
+ private String connectorType;
+
+ private String connectorDescription;
+
+ private String userName;
+
+ private String password;
+
+ private ExceptionListener exceptionListener;
+
+ private String clientID;
+
+ private ConnectionMetaData metaData = new ConnectionMetaDataImpl(this);
+
+ private long sendTimeout = 2500;
+
+ private IManagedContainer transportContainer;
+
+ private JMSClientProtocol protocol;
+
+ private List<SessionImpl> sessions = new ArrayList<SessionImpl>(0);
+
+ private transient IListener sessionListener = new LifecycleEventConverter<Session>(this)
+ {
+ @Override
+ protected IContainerEvent<Session> createContainerEvent(IContainer<Session> container, Session element, Kind kind)
+ {
+ if (kind == IContainerDelta.Kind.REMOVED)
+ {
+ removeSession((SessionImpl)element);
+ }
+
+ return new SingleDeltaContainerEvent<Session>(container, element, kind);
+ }
+ };
+
+ private transient IListener channelListener = new LifecycleEventAdapter()
+ {
+ @Override
+ protected void onDeactivated(ILifecycle lifecycle)
+ {
+ close();
+ }
+ };
+
+ private boolean modified;
+
+ private boolean stopped = true;
+
+ public ConnectionImpl(IManagedContainer transportContainer, String connectorType, String connectorDescription,
+ String userName, String password) throws JMSException
+ {
+ this.transportContainer = transportContainer == null ? JMSUtil.getTransportContainer() : transportContainer;
+ if (transportContainer == null)
+ {
+ throw new JMSException(Messages.getString("ConnectionImpl_0")); //$NON-NLS-1$
+ }
+
+ this.connectorType = connectorType;
+ this.connectorDescription = connectorDescription;
+ this.userName = userName;
+ this.password = password;
+
+ IConnector connector = Net4jUtil.getConnector(transportContainer, connectorType, connectorDescription);
+ JMSClientProtocol protocol = new JMSClientProtocol(this);
+ IChannel channel = protocol.open(connector);
+ channel.addListener(channelListener);
+
+ try
+ {
+ if (!new JMSLogonRequest(protocol, userName, password).send())
+ {
+ throw new JMSException(Messages.getString("ConnectionImpl_1")); //$NON-NLS-1$
+ }
+ }
+ catch (JMSException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+
+ public ConnectionConsumer createConnectionConsumer(Destination destination, String messageSelector,
+ ServerSessionPool sessionPool, int maxMessages)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public ConnectionConsumer createDurableConnectionConsumer(Topic topic, String subscriptionName,
+ String messageSelector, ServerSessionPool sessionPool, int maxMessages)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Session createSession(boolean transacted, int acknowledgeMode) throws JMSException
+ {
+ ensureOpen();
+ setModified();
+ int sessionID = findFreeSessionID();
+ SessionImpl session = new SessionImpl(this, sessionID, transacted, acknowledgeMode);
+ addSession(session);
+
+ try
+ {
+ if (!new JMSOpenSessionRequest(protocol, sessionID).send())
+ {
+ throw new JMSException(Messages.getString("ConnectionImpl_2")); //$NON-NLS-1$
+ }
+ }
+ catch (JMSException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+
+ return session;
+ }
+
+ public IManagedContainer getTransportContainer()
+ {
+ return transportContainer;
+ }
+
+ public String getConnectorType()
+ {
+ return connectorType;
+ }
+
+ public String getConnectorDescription()
+ {
+ return connectorDescription;
+ }
+
+ public String getUserName()
+ {
+ return userName;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public ConnectionMetaData getMetaData()
+ {
+ ensureOpen();
+ setModified();
+ return metaData;
+ }
+
+ public String getClientID()
+ {
+ ensureOpen();
+ setModified();
+ return clientID;
+ }
+
+ public void setClientID(String clientID)
+ {
+ ensureOpen();
+ if (clientID != null)
+ {
+ throw new IllegalStateException("clientID != null"); //$NON-NLS-1$
+ }
+
+ if (modified)
+ {
+ throw new IllegalStateException("modified == true"); //$NON-NLS-1$
+ }
+
+ this.clientID = clientID;
+ }
+
+ public ExceptionListener getExceptionListener()
+ {
+ ensureOpen();
+ setModified();
+ return exceptionListener;
+ }
+
+ public void setExceptionListener(ExceptionListener listener)
+ {
+ ensureOpen();
+ setModified();
+ exceptionListener = listener;
+ }
+
+ public long getSendTimeout()
+ {
+ return sendTimeout;
+ }
+
+ public void setSendTimeout(long sendTimeout)
+ {
+ this.sendTimeout = sendTimeout;
+ }
+
+ public synchronized void start() throws JMSException
+ {
+ ensureOpen();
+ setModified();
+ if (stopped)
+ {
+ for (SessionImpl session : getSessions())
+ {
+ try
+ {
+ session.activate();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ throw new JMSException(ex.getMessage());
+ }
+ }
+
+ stopped = false;
+ }
+ }
+
+ public synchronized void stop()
+ {
+ ensureOpen();
+ setModified();
+ if (!stopped)
+ {
+ for (SessionImpl session : getSessions())
+ {
+ session.deactivate();
+ }
+
+ stopped = true;
+ }
+ }
+
+ public synchronized void close()
+ {
+ if (protocol != null)
+ {
+ stop();
+ for (SessionImpl session : getSessions())
+ {
+ session.close();
+ }
+
+ protocol.getChannel().removeListener(channelListener);
+ protocol.close();
+ protocol = null;
+ }
+ }
+
+ /**
+ * @since 2.0
+ */
+ public JMSClientProtocol getProtocol()
+ {
+ return protocol;
+ }
+
+ public void handleMessageFromSignal(int sessionID, long consumerID, MessageImpl message)
+ {
+ SessionImpl session = sessions.get(sessionID);
+ session.handleServerMessage(consumerID, message);
+ }
+
+ public SessionImpl[] getSessions()
+ {
+ List<SessionImpl> result = new ArrayList<SessionImpl>(sessions.size());
+ synchronized (sessions)
+ {
+ for (SessionImpl session : sessions)
+ {
+ if (session != null)
+ {
+ result.add(session);
+ }
+ }
+ }
+
+ return result.toArray(new SessionImpl[result.size()]);
+ }
+
+ public Session[] getElements()
+ {
+ return getSessions();
+ }
+
+ @Override
+ public boolean isEmpty()
+ {
+ return getSessions().length == 0;
+ }
+
+ private int findFreeSessionID()
+ {
+ synchronized (sessions)
+ {
+ int size = sessions.size();
+ for (int i = 0; i < size; i++)
+ {
+ if (sessions.get(i) == null)
+ {
+ return i;
+ }
+ }
+
+ return size;
+ }
+ }
+
+ private void addSession(SessionImpl session)
+ {
+ synchronized (sessions)
+ {
+ int sessionID = session.getID();
+ while (sessionID >= sessions.size())
+ {
+ sessions.add(null);
+ }
+
+ sessions.set(sessionID, session);
+ }
+ }
+
+ private boolean removeSession(SessionImpl session)
+ {
+ synchronized (sessions)
+ {
+ int sessionID = session.getID();
+ if (sessions.get(sessionID) == session)
+ {
+ session.removeListener(sessionListener);
+ sessions.set(sessionID, null);
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ private void setModified()
+ {
+ modified = true;
+ }
+
+ private void ensureOpen() throws IllegalStateException
+ {
+ if (protocol == null)
+ {
+ throw new IllegalStateException("protocol == null"); //$NON-NLS-1$
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionMetaDataImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionMetaDataImpl.java
new file mode 100644
index 0000000000..fc7c611260
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ConnectionMetaDataImpl.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.ConnectionMetaData;
+
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+
+public class ConnectionMetaDataImpl implements ConnectionMetaData
+{
+ private ConnectionImpl connection;
+
+ public ConnectionMetaDataImpl(ConnectionImpl connection)
+ {
+ this.connection = connection;
+ }
+
+ public ConnectionImpl getConnection()
+ {
+ return connection;
+ }
+
+ public int getJMSMajorVersion()
+ {
+ return 1;
+ }
+
+ public int getJMSMinorVersion()
+ {
+ return 1;
+ }
+
+ public String getJMSVersion()
+ {
+ return "1.1"; //$NON-NLS-1$
+ }
+
+ public String getJMSProviderName()
+ {
+ return "Net4j JMS"; //$NON-NLS-1$
+ }
+
+ public int getProviderMajorVersion()
+ {
+ return 0;
+ }
+
+ public int getProviderMinorVersion()
+ {
+ return 8;
+ }
+
+ public String getProviderVersion()
+ {
+ return "0.8.0"; //$NON-NLS-1$
+ }
+
+ public Enumeration<?> getJMSXPropertyNames()
+ {
+ return new StringTokenizer(""); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/DestinationImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/DestinationImpl.java
new file mode 100644
index 0000000000..1a7c5b3cd0
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/DestinationImpl.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import java.io.Serializable;
+import java.rmi.Remote;
+
+public abstract class DestinationImpl implements JMSDestination, Remote, Serializable
+{
+ private static final long serialVersionUID = 1L;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSDestination.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSDestination.java
new file mode 100644
index 0000000000..8b760504c6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSDestination.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.Destination;
+
+public interface JMSDestination extends Destination
+{
+ public String getName();
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSTemporaryDestination.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSTemporaryDestination.java
new file mode 100644
index 0000000000..226c565383
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/JMSTemporaryDestination.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+public interface JMSTemporaryDestination extends JMSDestination
+{
+ public ConnectionImpl getOwningConnection();
+
+ public long getConnectionId();
+
+ public boolean validForConnection(ConnectionImpl connection);
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MapMessageImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MapMessageImpl.java
new file mode 100644
index 0000000000..883bb6ddb1
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MapMessageImpl.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+public class MapMessageImpl extends MessageImpl implements MapMessage
+{
+ public boolean getBoolean(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public byte getByte(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public byte[] getBytes(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public char getChar(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public double getDouble(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public float getFloat(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int getInt(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public long getLong(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public Enumeration<?> getMapNames()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public Object getObject(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public short getShort(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public String getString(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public boolean itemExists(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setBoolean(String name, boolean value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setByte(String name, byte value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setBytes(String name, byte[] value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setBytes(String name, byte[] value, int offset, int length)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setChar(String name, char value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setDouble(String name, double value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setFloat(String name, float value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setInt(String name, int value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setLong(String name, long value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setObject(String name, Object value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setShort(String name, short value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void setString(String name, String value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ @Override
+ public void populate(Message source) throws JMSException
+ {
+ super.populate(source);
+ MapMessage map = (MapMessage)source;
+ Enumeration<?> e = map.getMapNames();
+ while (e.hasMoreElements())
+ {
+ String name = (String)e.nextElement();
+ Object value = map.getObject(name);
+ setObject(name, value);
+ }
+ }
+
+ @Override
+ public void write(ExtendedDataOutputStream out) throws IOException
+ {
+ super.write(out);
+ }
+
+ @Override
+ public void read(ExtendedDataInputStream in) throws IOException
+ {
+ super.read(in);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageConsumerImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageConsumerImpl.java
new file mode 100644
index 0000000000..e29160a7de
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageConsumerImpl.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.internal.jms.bundle.OM;
+import org.eclipse.net4j.internal.jms.messages.Messages;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.Session;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+public class MessageConsumerImpl extends Lifecycle implements MessageConsumer
+{
+ private static final long DO_NOT_WAIT = -1L;
+
+ private SessionImpl session;
+
+ private long consumerID;
+
+ private DestinationImpl destination;
+
+ private String messageSelector;
+
+ private MessageListener messageListener;
+
+ /**
+ * Incoming messages
+ */
+ private BlockingQueue<MessageImpl> messages = new LinkedBlockingQueue<MessageImpl>();
+
+ public MessageConsumerImpl(SessionImpl session, long consumerID, DestinationImpl destination, String messageSelector)
+ {
+ this.session = session;
+ this.consumerID = consumerID;
+ this.destination = destination;
+ this.messageSelector = messageSelector;
+ }
+
+ public SessionImpl getSession()
+ {
+ return session;
+ }
+
+ public long getConsumerID()
+ {
+ return consumerID;
+ }
+
+ public DestinationImpl getDestination()
+ {
+ return destination;
+ }
+
+ public String getMessageSelector()
+ {
+ return messageSelector;
+ }
+
+ public MessageListener getMessageListener()
+ {
+ return messageListener;
+ }
+
+ public void setMessageListener(MessageListener listener)
+ {
+ messageListener = listener;
+ if (messageListener != null)
+ {
+ session.addWork(this);
+ }
+ }
+
+ public Message receive() throws JMSException
+ {
+ return receive(Long.MAX_VALUE);
+ }
+
+ public Message receive(long timeout) throws JMSException
+ {
+ if (messageListener != null)
+ {
+ throw new JMSException(Messages.getString("MessageConsumerImpl.0")); //$NON-NLS-1$
+ }
+
+ if (timeout == DO_NOT_WAIT)
+ {
+ return messages.poll();
+ }
+
+ try
+ {
+ return messages.poll(timeout, TimeUnit.MILLISECONDS);
+ }
+ catch (InterruptedException ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+
+ public Message receiveNoWait() throws JMSException
+ {
+ return receive(DO_NOT_WAIT);
+ }
+
+ public void close()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void handleServerMessage(MessageImpl message)
+ {
+ messages.add(message);
+ if (messageListener != null)
+ {
+ session.addWork(this);
+ }
+ }
+
+ public void dispatchMessage()
+ {
+ MessageListener listener = messageListener;
+ if (listener != null)
+ {
+ MessageImpl message = messages.poll();
+ if (message == null)
+ {
+ OM.LOG.warn(Messages.getString("MessageConsumerImpl.1")); //$NON-NLS-1$
+ return;
+ }
+
+ try
+ {
+ listener.onMessage(message);
+ if (!session.getTransacted() && session.getAcknowledgeMode() != Session.CLIENT_ACKNOWLEDGE)
+ {
+ session.acknowledgeMessages(this);
+ }
+ }
+ catch (RuntimeException ex)
+ {
+ OM.LOG.warn(ex);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageImpl.java
new file mode 100644
index 0000000000..ef43d9489e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageImpl.java
@@ -0,0 +1,464 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.internal.jms.messages.Messages;
+import org.eclipse.net4j.internal.jms.util.DestinationUtil;
+import org.eclipse.net4j.internal.jms.util.TypeUtil;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageFormatException;
+import javax.jms.Session;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class MessageImpl implements Message, Comparable<MessageImpl>
+{
+ private static final String[] KEYWORDS = { "and", "between", "escape", "in", "is", "like", "false", "null", "or", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$
+ "not", "true" }; //$NON-NLS-1$ //$NON-NLS-2$
+
+ private Map<String, Object> properties = new HashMap<String, Object>();
+
+ private byte[] correlationID;
+
+ private int deliveryMode;
+
+ private DestinationImpl destination;
+
+ private long expiration;
+
+ private String messageID;
+
+ private int priority;
+
+ private boolean redelivered;
+
+ private DestinationImpl replyTo;
+
+ private long timestamp;
+
+ private String type;
+
+ private SessionImpl receivingSession;
+
+ private MessageConsumerImpl receivingConsumer;
+
+ public MessageImpl()
+ {
+ }
+
+ public SessionImpl getReceivingSession()
+ {
+ return receivingSession;
+ }
+
+ public void setReceivingSession(SessionImpl receivingSession)
+ {
+ this.receivingSession = receivingSession;
+ }
+
+ public MessageConsumerImpl getReceivingConsumer()
+ {
+ return receivingConsumer;
+ }
+
+ public void setReceivingConsumer(MessageConsumerImpl receivingConsumer)
+ {
+ this.receivingConsumer = receivingConsumer;
+ }
+
+ public String getJMSCorrelationID()
+ {
+ if (correlationID == null)
+ {
+ return null;
+ }
+
+ return new String(correlationID);
+ }
+
+ public void setJMSCorrelationID(String correlationID)
+ {
+ this.correlationID = correlationID == null ? null : correlationID.getBytes();
+ }
+
+ public byte[] getJMSCorrelationIDAsBytes()
+ {
+ return correlationID;
+ }
+
+ public void setJMSCorrelationIDAsBytes(byte[] correlationID)
+ {
+ this.correlationID = correlationID;
+ }
+
+ public int getJMSDeliveryMode()
+ {
+ return deliveryMode;
+ }
+
+ public void setJMSDeliveryMode(int deliveryMode)
+ {
+ this.deliveryMode = deliveryMode;
+ }
+
+ public Destination getJMSDestination()
+ {
+ return destination;
+ }
+
+ public void setJMSDestination(Destination destination) throws JMSException
+ {
+ this.destination = DestinationUtil.convert(destination);
+ }
+
+ public long getJMSExpiration()
+ {
+ return expiration;
+ }
+
+ public void setJMSExpiration(long expiration)
+ {
+ this.expiration = expiration;
+ }
+
+ public String getJMSMessageID()
+ {
+ return messageID;
+ }
+
+ public void setJMSMessageID(String messageID)
+ {
+ this.messageID = messageID;
+ }
+
+ public int getJMSPriority()
+ {
+ return priority;
+ }
+
+ public void setJMSPriority(int priority)
+ {
+ this.priority = priority;
+ }
+
+ public boolean getJMSRedelivered()
+ {
+ return redelivered;
+ }
+
+ public void setJMSRedelivered(boolean redelivered)
+ {
+ this.redelivered = redelivered;
+ }
+
+ public Destination getJMSReplyTo()
+ {
+ return replyTo;
+ }
+
+ public void setJMSReplyTo(Destination replyTo) throws JMSException
+ {
+ this.replyTo = DestinationUtil.convert(replyTo);
+ }
+
+ public long getJMSTimestamp()
+ {
+ return timestamp;
+ }
+
+ public void setJMSTimestamp(long timestamp)
+ {
+ this.timestamp = timestamp;
+ }
+
+ public String getJMSType()
+ {
+ return type;
+ }
+
+ public void setJMSType(String type)
+ {
+ this.type = type;
+ }
+
+ public void clearProperties()
+ {
+ properties.clear();
+ }
+
+ public boolean propertyExists(String name)
+ {
+ return properties.containsKey(name);
+ }
+
+ public boolean getBooleanProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getBoolean(properties.get(name));
+ }
+
+ public byte getByteProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getByte(properties.get(name));
+ }
+
+ public short getShortProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getShort(properties.get(name));
+ }
+
+ public int getIntProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getInt(properties.get(name));
+ }
+
+ public long getLongProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getLong(properties.get(name));
+ }
+
+ public float getFloatProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getFloat(properties.get(name));
+ }
+
+ public double getDoubleProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getDouble(properties.get(name));
+ }
+
+ public String getStringProperty(String name) throws MessageFormatException
+ {
+ return TypeUtil.getString(properties.get(name));
+ }
+
+ public Object getObjectProperty(String name)
+ {
+ return properties.get(name);
+ }
+
+ public Enumeration<String> getPropertyNames()
+ {
+ return Collections.enumeration(properties.keySet());
+ }
+
+ public void setBooleanProperty(String name, boolean value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setByteProperty(String name, byte value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setShortProperty(String name, short value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setIntProperty(String name, int value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setLongProperty(String name, long value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setFloatProperty(String name, float value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setDoubleProperty(String name, double value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setStringProperty(String name, String value) throws JMSException
+ {
+ setProperty(name, value);
+ }
+
+ public void setObjectProperty(String name, Object value) throws JMSException
+ {
+ if (value instanceof Boolean || value instanceof Byte || value instanceof Short || value instanceof Integer
+ || value instanceof Long || value instanceof Float || value instanceof Double || value instanceof String
+ || value == null)
+ {
+ setProperty(name, value);
+ }
+ else
+ {
+ throw new MessageFormatException(MessageFormat.format(
+ Messages.getString("MessageImpl_11"), value.getClass().getName())); //$NON-NLS-1$
+ }
+ }
+
+ protected void setProperty(String name, Object value) throws JMSException
+ {
+ if (name == null)
+ {
+ throw new JMSException(MessageFormat.format(Messages.getString("MessageImpl_13"), name)); //$NON-NLS-1$
+ }
+
+ char[] chars = name.toCharArray();
+ if (chars.length == 0)
+ {
+ throw new JMSException(MessageFormat.format(Messages.getString("MessageImpl_13"), name)); //$NON-NLS-1$
+ }
+
+ if (!Character.isJavaIdentifierStart(chars[0]))
+ {
+ throw new JMSException(MessageFormat.format(Messages.getString("MessageImpl_13"), name)); //$NON-NLS-1$
+ }
+
+ for (int i = 1; i < chars.length; ++i)
+ {
+ if (!Character.isJavaIdentifierPart(chars[i]))
+ {
+ throw new JMSException(MessageFormat.format(Messages.getString("MessageImpl_13"), name)); //$NON-NLS-1$
+ }
+ }
+
+ for (int i = 0; i < KEYWORDS.length; ++i)
+ {
+ if (name.equalsIgnoreCase(KEYWORDS[i]))
+ {
+ throw new JMSException(MessageFormat.format(Messages.getString("MessageImpl_13"), name)); //$NON-NLS-1$
+ }
+ }
+
+ properties.put(name, value);
+ }
+
+ public void acknowledge()
+ {
+ if (receivingSession == null)
+ {
+ return;
+ }
+
+ if (!receivingSession.isActive())
+ {
+ return;
+ }
+
+ if (receivingSession.getTransacted())
+ {
+ return;
+ }
+
+ if (receivingSession.getAcknowledgeMode() != Session.CLIENT_ACKNOWLEDGE)
+ {
+ return;
+ }
+
+ receivingSession.acknowledgeMessages(receivingConsumer);
+ }
+
+ public void clearBody()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int compareTo(MessageImpl obj)
+ {
+ if (priority < obj.priority)
+ {
+ return -1;
+ }
+
+ if (priority > obj.priority)
+ {
+ return 1;
+ }
+
+ return 0;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void populate(Message source) throws JMSException
+ {
+ setJMSMessageID(source.getJMSMessageID());
+ setJMSDestination(source.getJMSDestination());
+ setJMSTimestamp(source.getJMSTimestamp());
+ setJMSPriority(source.getJMSPriority());
+ setJMSExpiration(source.getJMSExpiration());
+ setJMSDeliveryMode(source.getJMSDeliveryMode());
+ setJMSCorrelationID(source.getJMSCorrelationID());
+ setJMSType(source.getJMSType());
+ setJMSReplyTo(source.getJMSReplyTo());
+
+ Enumeration<String> e = source.getPropertyNames();
+ while (e.hasMoreElements())
+ {
+ String name = e.nextElement();
+ Object value = source.getObjectProperty(name);
+ setObjectProperty(name, value);
+ }
+ }
+
+ public void write(ExtendedDataOutputStream out) throws IOException
+ {
+ out.writeByteArray(correlationID);
+ out.writeByte(deliveryMode);
+ DestinationUtil.write(out, destination);
+ out.writeLong(expiration);
+ out.writeString(messageID);
+ out.writeByte(priority);
+ out.writeBoolean(redelivered);
+ DestinationUtil.write(out, replyTo);
+ out.writeLong(timestamp);
+ out.writeString(type);
+
+ out.writeInt(properties.size());
+ for (Entry<String, Object> entry : properties.entrySet())
+ {
+ out.writeString(entry.getKey());
+ TypeUtil.write(out, entry.getValue());
+ }
+ }
+
+ public void read(ExtendedDataInputStream in) throws IOException
+ {
+ correlationID = in.readByteArray();
+ deliveryMode = in.readByte();
+ destination = DestinationUtil.read(in);
+ expiration = in.readLong();
+ messageID = in.readString();
+ priority = in.readByte();
+ redelivered = in.readBoolean();
+ replyTo = DestinationUtil.read(in);
+ timestamp = in.readLong();
+ type = in.readString();
+
+ int size = in.readInt();
+ for (int i = 0; i < size; i++)
+ {
+ String key = in.readString();
+ Object value = TypeUtil.read(in);
+ properties.put(key, value);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageProducerImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageProducerImpl.java
new file mode 100644
index 0000000000..9f5d1b3ddc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/MessageProducerImpl.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.internal.jms.messages.Messages;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageFormatException;
+import javax.jms.MessageProducer;
+
+import java.util.Date;
+
+public class MessageProducerImpl extends Lifecycle implements MessageProducer
+{
+ private SessionImpl session;
+
+ private DestinationImpl destination;
+
+ private int deliveryMode = DeliveryMode.PERSISTENT;
+
+ private int priority = Message.DEFAULT_PRIORITY;
+
+ private long timeToLive;
+
+ private boolean disableMessageTimestamp;
+
+ private boolean disableMessageID;
+
+ public MessageProducerImpl(SessionImpl session, DestinationImpl destination)
+ {
+ this.session = session;
+ this.destination = destination;
+ }
+
+ public SessionImpl getSession()
+ {
+ return session;
+ }
+
+ public int getDeliveryMode()
+ {
+ return deliveryMode;
+ }
+
+ public void setDeliveryMode(int deliveryMode)
+ {
+ this.deliveryMode = deliveryMode;
+ }
+
+ public int getPriority()
+ {
+ return priority;
+ }
+
+ public void setPriority(int priority)
+ {
+ this.priority = priority;
+ }
+
+ public long getTimeToLive()
+ {
+ return timeToLive;
+ }
+
+ public void setTimeToLive(long timeToLive)
+ {
+ this.timeToLive = timeToLive;
+ }
+
+ public DestinationImpl getDestination()
+ {
+ return destination;
+ }
+
+ public boolean getDisableMessageID()
+ {
+ return disableMessageID;
+ }
+
+ public void setDisableMessageID(boolean disableMessageID)
+ {
+ this.disableMessageID = disableMessageID;
+ }
+
+ public boolean getDisableMessageTimestamp()
+ {
+ return disableMessageTimestamp;
+ }
+
+ public void setDisableMessageTimestamp(boolean disableMessageTimestamp)
+ {
+ this.disableMessageTimestamp = disableMessageTimestamp;
+ }
+
+ public void send(Message message) throws JMSException
+ {
+ send(getDestination(), message, getDeliveryMode(), getPriority(), getTimeToLive());
+ }
+
+ public void send(Message message, int deliveryMode, int priority, long timeToLive) throws JMSException
+ {
+ send(getDestination(), message, getDeliveryMode(), getPriority(), getTimeToLive());
+ }
+
+ public void send(Destination destination, Message message) throws JMSException
+ {
+ send(destination, message, getDeliveryMode(), getPriority(), getTimeToLive());
+ }
+
+ public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive)
+ throws JMSException
+ {
+ if (message == null)
+ {
+ throw new MessageFormatException(Messages.getString("MessageProducerImpl_0")); //$NON-NLS-1$
+ }
+
+ // message.setJMSMessageID(MessageId.create());
+ message.setJMSDestination(destination);
+ message.setJMSTimestamp(new Date().getTime());
+ message.setJMSPriority(priority);
+
+ if (timeToLive > 0)
+ {
+ message.setJMSExpiration(System.currentTimeMillis() + timeToLive);
+ }
+ else
+ {
+ message.setJMSExpiration(0);
+ }
+
+ if (destination instanceof JMSTemporaryDestination)
+ {
+ message.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
+ }
+ else
+ {
+ message.setJMSDeliveryMode(deliveryMode);
+ }
+
+ session.sendMessage(message);
+ }
+
+ public void close()
+ {
+ throw new NotYetImplementedException();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/NotYetImplementedException.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/NotYetImplementedException.java
new file mode 100644
index 0000000000..37df50ca25
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/NotYetImplementedException.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+public class NotYetImplementedException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public NotYetImplementedException()
+ {
+ }
+
+ public NotYetImplementedException(String message)
+ {
+ super(message);
+ }
+
+ public NotYetImplementedException(Throwable cause)
+ {
+ super(cause);
+ }
+
+ public NotYetImplementedException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ObjectMessageImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ObjectMessageImpl.java
new file mode 100644
index 0000000000..c9193c0575
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/ObjectMessageImpl.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.internal.jms.bundle.OM;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+public class ObjectMessageImpl extends MessageImpl implements ObjectMessage
+{
+ private Serializable object;
+
+ public ObjectMessageImpl()
+ {
+ }
+
+ public ObjectMessageImpl(Serializable object)
+ {
+ this.object = object;
+ }
+
+ public Serializable getObject()
+ {
+ return object;
+ }
+
+ public void setObject(Serializable object)
+ {
+ this.object = object;
+ }
+
+ @Override
+ public void populate(Message source) throws JMSException
+ {
+ super.populate(source);
+ ObjectMessage object = (ObjectMessage)source;
+ setObject(object.getObject());
+ }
+
+ @Override
+ public void write(ExtendedDataOutputStream out) throws IOException
+ {
+ super.write(out);
+ if (object != null)
+ {
+ out.writeBoolean(true);
+ ObjectOutputStream stream = new ObjectOutputStream(out);
+ stream.writeObject(object);
+ }
+ else
+ {
+ out.writeBoolean(false);
+ }
+ }
+
+ @Override
+ public void read(ExtendedDataInputStream in) throws IOException
+ {
+ super.read(in);
+ boolean notNull = in.readBoolean();
+ if (notNull)
+ {
+ try
+ {
+ ObjectInputStream stream = new ObjectInputStream(in);
+ object = (Serializable)stream.readObject();
+ }
+ catch (ClassNotFoundException ex)
+ {
+ OM.LOG.error(ex);
+ throw new IOException(ex.getMessage());
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueBrowserImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueBrowserImpl.java
new file mode 100644
index 0000000000..5ae59878ae
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueBrowserImpl.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.Queue;
+import javax.jms.QueueBrowser;
+
+import java.util.Enumeration;
+
+public class QueueBrowserImpl implements QueueBrowser
+{
+ private Queue queue;
+
+ private String messageSelector;
+
+ public QueueBrowserImpl(Queue queue, String messageSelector)
+ {
+ this.queue = queue;
+ this.messageSelector = messageSelector;
+ }
+
+ public QueueBrowserImpl(Queue queue)
+ {
+ this(queue, null);
+ }
+
+ public Queue getQueue()
+ {
+ return queue;
+ }
+
+ public String getMessageSelector()
+ {
+ return messageSelector;
+ }
+
+ public void close()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public Enumeration<?> getEnumeration()
+ {
+ throw new NotYetImplementedException();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueImpl.java
new file mode 100644
index 0000000000..e3df26bd08
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueImpl.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.Queue;
+
+public class QueueImpl extends DestinationImpl implements Queue
+{
+ private static final long serialVersionUID = 1L;
+
+ private String queueName;
+
+ public QueueImpl(String queueName)
+ {
+ this.queueName = queueName;
+ }
+
+ public String getQueueName()
+ {
+ return queueName;
+ }
+
+ public String getName()
+ {
+ return queueName;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueReceiverImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueReceiverImpl.java
new file mode 100644
index 0000000000..cee70ee771
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueReceiverImpl.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.QueueReceiver;
+
+public class QueueReceiverImpl extends MessageConsumerImpl implements QueueReceiver
+{
+ public QueueReceiverImpl(SessionImpl session, int id, QueueImpl queue, String messageSelector)
+ {
+ super(session, id, queue, messageSelector);
+ }
+
+ public QueueImpl getQueue()
+ {
+ return (QueueImpl)getDestination();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueSenderImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueSenderImpl.java
new file mode 100644
index 0000000000..b240c1daca
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/QueueSenderImpl.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Queue;
+import javax.jms.QueueSender;
+
+public class QueueSenderImpl extends MessageProducerImpl implements QueueSender
+{
+ public QueueSenderImpl(SessionImpl session, QueueImpl queue)
+ {
+ super(session, queue);
+ }
+
+ public QueueImpl getQueue()
+ {
+ return (QueueImpl)getDestination();
+ }
+
+ public void send(Queue queue, Message message) throws JMSException
+ {
+ send(queue, message, getDeliveryMode(), getPriority(), getTimeToLive());
+ }
+
+ public void send(Queue queue, Message message, int deliveryMode, int priority, long timeToLive) throws JMSException
+ {
+ super.send(queue, message, deliveryMode, priority, timeToLive);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/SessionImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/SessionImpl.java
new file mode 100644
index 0000000000..c1ec43bd5b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/SessionImpl.java
@@ -0,0 +1,455 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.internal.jms.bundle.OM;
+import org.eclipse.net4j.internal.jms.messages.Messages;
+import org.eclipse.net4j.internal.jms.protocol.JMSAcknowledgeRequest;
+import org.eclipse.net4j.internal.jms.protocol.JMSClientMessageRequest;
+import org.eclipse.net4j.internal.jms.protocol.JMSCommitRequest;
+import org.eclipse.net4j.internal.jms.protocol.JMSRecoverRequest;
+import org.eclipse.net4j.internal.jms.protocol.JMSRegisterConsumerRequest;
+import org.eclipse.net4j.internal.jms.protocol.JMSRollbackRequest;
+import org.eclipse.net4j.internal.jms.util.DestinationUtil;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.util.concurrent.QueueWorker;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.log.OMLogger;
+
+import javax.jms.BytesMessage;
+import javax.jms.Destination;
+import javax.jms.IllegalStateException;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.ObjectMessage;
+import javax.jms.Queue;
+import javax.jms.QueueBrowser;
+import javax.jms.Session;
+import javax.jms.StreamMessage;
+import javax.jms.TemporaryQueue;
+import javax.jms.TemporaryTopic;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+import javax.jms.TopicSubscriber;
+import javax.transaction.TransactionRolledbackException;
+
+import java.io.Serializable;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class SessionImpl extends QueueWorker<MessageConsumerImpl> implements Session
+{
+ private ConnectionImpl connection;
+
+ private int id;
+
+ private boolean transacted;
+
+ private int acknowledgeMode;
+
+ private Map<Long, MessageConsumerImpl> consumers = new HashMap<Long, MessageConsumerImpl>();
+
+ /**
+ * Outgoing transacted messages
+ */
+ private List<MessageImpl> messages = new ArrayList<MessageImpl>();
+
+ private Set<MessageProducerImpl> producers = new HashSet<MessageProducerImpl>();
+
+ public SessionImpl(ConnectionImpl connection, int id, boolean transacted, int acknowledgeMode) throws JMSException
+ {
+ this.connection = connection;
+ this.id = id;
+ this.transacted = transacted;
+ this.acknowledgeMode = acknowledgeMode;
+
+ try
+ {
+ activate();
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+
+ public ConnectionImpl getConnection()
+ {
+ return connection;
+ }
+
+ public int getID()
+ {
+ return id;
+ }
+
+ public boolean getTransacted()
+ {
+ return transacted;
+ }
+
+ public int getAcknowledgeMode()
+ {
+ return acknowledgeMode;
+ }
+
+ public MessageListener getMessageListener()
+ {
+ return null;
+ }
+
+ public void setMessageListener(MessageListener listener)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public MessageProducer createProducer(Destination destination) throws JMSException
+ {
+ DestinationImpl dest = DestinationUtil.convert(destination);
+ MessageProducerImpl producer = new MessageProducerImpl(this, dest);
+ producers.add(producer);
+ return producer;
+ }
+
+ public MessageConsumer createConsumer(Destination destination) throws JMSException
+ {
+ return createConsumer(destination, null);
+ }
+
+ public MessageConsumer createConsumer(Destination destination, String messageSelector) throws JMSException
+ {
+ return createConsumer(destination, null, false);
+ }
+
+ public MessageConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal)
+ throws JMSException
+ {
+ DestinationImpl dest = DestinationUtil.convert(destination);
+ long consumerID = registerConsumer(dest, messageSelector, noLocal, false);
+ MessageConsumerImpl consumer = new MessageConsumerImpl(this, consumerID, dest, messageSelector);
+ consumers.put(consumerID, consumer);
+ return consumer;
+ }
+
+ public Queue createQueue(String queueName)
+ {
+ return new QueueImpl(queueName);
+ }
+
+ public TemporaryQueue createTemporaryQueue()
+ {
+ return new TemporaryQueueImpl();
+ }
+
+ public QueueBrowser createBrowser(Queue queue)
+ {
+ return new QueueBrowserImpl(queue);
+ }
+
+ public QueueBrowser createBrowser(Queue queue, String messageSelector)
+ {
+ return new QueueBrowserImpl(queue, messageSelector);
+ }
+
+ public Topic createTopic(String topicName)
+ {
+ return new TopicImpl(topicName);
+ }
+
+ public TemporaryTopic createTemporaryTopic()
+ {
+ return new TemporaryTopicImpl();
+ }
+
+ public TopicSubscriber createDurableSubscriber(Topic topic, String name) throws JMSException
+ {
+ return createDurableSubscriber(topic, name, null, false);
+ }
+
+ public TopicSubscriber createDurableSubscriber(Topic topic, String name, String messageSelector, boolean noLocal)
+ throws JMSException
+ {
+ TopicImpl dest = (TopicImpl)DestinationUtil.convert(topic);
+ long consumerID = registerConsumer(dest, messageSelector, noLocal, true);
+ TopicSubscriberImpl subscriber = new TopicSubscriberImpl(this, consumerID, dest, name, messageSelector, noLocal);
+ consumers.put(consumerID, subscriber);
+ return subscriber;
+ }
+
+ public void unsubscribe(String name)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public Message createMessage()
+ {
+ return new MessageImpl();
+ }
+
+ public StreamMessage createStreamMessage()
+ {
+ return new StreamMessageImpl();
+ }
+
+ public BytesMessage createBytesMessage()
+ {
+ return new BytesMessageImpl();
+ }
+
+ public MapMessage createMapMessage()
+ {
+ return new MapMessageImpl();
+ }
+
+ public ObjectMessage createObjectMessage()
+ {
+ return createObjectMessage(null);
+ }
+
+ public ObjectMessage createObjectMessage(Serializable object)
+ {
+ return new ObjectMessageImpl(object);
+ }
+
+ public TextMessage createTextMessage()
+ {
+ return createTextMessage(null);
+ }
+
+ public TextMessage createTextMessage(String text)
+ {
+ return new TextMessageImpl(text);
+ }
+
+ public void recover() throws JMSException
+ {
+ ensureNotTransacted();
+ try
+ {
+ stop();
+ new JMSRecoverRequest(connection.getProtocol(), id).send();
+ start();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ close();
+ }
+ }
+
+ public void commit() throws JMSException
+ {
+ ensureTransacted();
+ synchronized (messages)
+ {
+ try
+ {
+ String[] messageIDs = new JMSCommitRequest(connection.getProtocol(), id, messages).send();
+ if (messageIDs == null)
+ {
+ throw new TransactionRolledbackException(Messages.getString("SessionImpl_0")); //$NON-NLS-1$
+ }
+
+ for (int i = 0; i < messageIDs.length; i++)
+ {
+ messages.get(i).setJMSMessageID(messageIDs[i]);
+ }
+
+ messages.clear();
+ }
+ catch (JMSException ex)
+ {
+ throw ex;
+ }
+ catch (RuntimeException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+ }
+
+ public void rollback() throws JMSException
+ {
+ ensureTransacted();
+ synchronized (messages)
+ {
+ try
+ {
+ if (!new JMSRollbackRequest(connection.getProtocol(), id).send())
+ {
+ throw new JMSException(Messages.getString("SessionImpl_1")); //$NON-NLS-1$
+ }
+
+ messages.clear();
+ }
+ catch (JMSException ex)
+ {
+ throw ex;
+ }
+ catch (RuntimeException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+ }
+
+ public void close()
+ {
+ LifecycleUtil.deactivate(this, OMLogger.Level.DEBUG);
+ }
+
+ public void run()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public long registerConsumer(DestinationImpl destination, String messageSelector, boolean noLocal, boolean durable)
+ throws JMSException
+ {
+ try
+ {
+ return new JMSRegisterConsumerRequest(connection.getProtocol(), id, destination, messageSelector, noLocal,
+ durable).send();
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+
+ public void sendMessage(Message message) throws JMSException
+ {
+ if (getTransacted())
+ {
+ synchronized (messages)
+ {
+ if (message instanceof MessageImpl)
+ {
+ messages.add(MessageUtil.copy(message));
+ }
+ else
+ {
+ messages.add(MessageUtil.convert(message));
+ }
+ }
+ }
+ else
+ {
+ try
+ {
+ MessageImpl impl = MessageUtil.convert(message);
+ JMSClientMessageRequest request = new JMSClientMessageRequest(connection.getProtocol(), impl);
+ String messageID = request.send(connection.getSendTimeout());
+ if (messageID == null)
+ {
+ throw new JMSException(Messages.getString("SessionImpl_2")); //$NON-NLS-1$
+ }
+
+ message.setJMSMessageID(messageID);
+ }
+ catch (JMSException ex)
+ {
+ throw ex;
+ }
+ catch (RuntimeException ex)
+ {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ throw new JMSException(ex.getMessage());
+ }
+ }
+ }
+
+ public boolean acknowledgeMessages(MessageConsumerImpl consumer)
+ {
+ try
+ {
+ new JMSAcknowledgeRequest(connection.getProtocol(), id).sendAsync();
+ return true;
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ return true;
+ }
+ }
+
+ public void handleServerMessage(long consumerID, MessageImpl message)
+ {
+ message.setReceivingSession(this);
+ MessageConsumerImpl consumer = consumers.get(consumerID);
+ if (consumer == null)
+ {
+ OM.LOG.warn(MessageFormat.format(Messages.getString("SessionImpl_3"), consumerID)); //$NON-NLS-1$
+ return;
+ }
+
+ consumer.handleServerMessage(message);
+ }
+
+ @Override
+ protected String getThreadName()
+ {
+ return "jms-session"; //$NON-NLS-1$
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ protected void work(WorkContext context, MessageConsumerImpl consumer)
+ {
+ consumer.dispatchMessage();
+ }
+
+ private void ensureTransacted() throws IllegalStateException
+ {
+ if (!transacted)
+ {
+ throw new IllegalStateException("Session " + id + " not transacted"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ private void ensureNotTransacted() throws IllegalStateException
+ {
+ if (transacted)
+ {
+ throw new IllegalStateException("Session " + id + " transacted"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ private void start()
+ {
+ }
+
+ private void stop()
+ {
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/StreamMessageImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/StreamMessageImpl.java
new file mode 100644
index 0000000000..2c0c6ac554
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/StreamMessageImpl.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageEOFException;
+import javax.jms.StreamMessage;
+
+import java.io.IOException;
+
+public class StreamMessageImpl extends MessageImpl implements StreamMessage
+{
+ public boolean readBoolean()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public byte readByte()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readBytes(byte[] value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public char readChar()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public double readDouble()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public float readFloat()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public int readInt()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public long readLong()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public Object readObject()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public short readShort()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public String readString()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void reset()
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeBoolean(boolean value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeByte(byte value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeBytes(byte[] value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeBytes(byte[] value, int offset, int length)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeChar(char value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeDouble(double value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeFloat(float value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeInt(int value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeLong(long value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeObject(Object value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeShort(short value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ public void writeString(String value)
+ {
+ throw new NotYetImplementedException();
+ }
+
+ @Override
+ public void populate(Message source) throws JMSException
+ {
+ super.populate(source);
+ StreamMessage from = (StreamMessage)source;
+ from.reset();
+ try
+ {
+ while (true)
+ {
+ Object object = from.readObject();
+ writeObject(object);
+ }
+ }
+ catch (MessageEOFException ignore)
+ {
+ }
+ }
+
+ @Override
+ public void write(ExtendedDataOutputStream out) throws IOException
+ {
+ super.write(out);
+ }
+
+ @Override
+ public void read(ExtendedDataInputStream in) throws IOException
+ {
+ super.read(in);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryQueueImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryQueueImpl.java
new file mode 100644
index 0000000000..781c6b65a8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryQueueImpl.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.TemporaryQueue;
+
+public class TemporaryQueueImpl extends QueueImpl implements TemporaryQueue
+{
+ private static final long serialVersionUID = 1L;
+
+ private static int counter;
+
+ public TemporaryQueueImpl()
+ {
+ super("TempQueue" + ++counter); //$NON-NLS-1$
+ }
+
+ public void delete()
+ {
+ throw new NotYetImplementedException();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryTopicImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryTopicImpl.java
new file mode 100644
index 0000000000..5d877f2098
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TemporaryTopicImpl.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.TemporaryTopic;
+
+public class TemporaryTopicImpl extends TopicImpl implements TemporaryTopic
+{
+ private static final long serialVersionUID = 1L;
+
+ private static int counter;
+
+ public TemporaryTopicImpl()
+ {
+ super("TempTopic" + ++counter); //$NON-NLS-1$
+ }
+
+ public void delete()
+ {
+ throw new NotYetImplementedException();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TextMessageImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TextMessageImpl.java
new file mode 100644
index 0000000000..eb077e24ea
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TextMessageImpl.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.TextMessage;
+
+import java.io.IOException;
+
+public class TextMessageImpl extends MessageImpl implements TextMessage
+{
+ private String text;
+
+ public TextMessageImpl()
+ {
+ }
+
+ public TextMessageImpl(String text)
+ {
+ this.text = text;
+ }
+
+ public String getText()
+ {
+ return text;
+ }
+
+ public void setText(String text)
+ {
+ this.text = text;
+ }
+
+ @Override
+ public void populate(Message source) throws JMSException
+ {
+ super.populate(source);
+ TextMessage text = (TextMessage)source;
+ setText(text.getText());
+ }
+
+ @Override
+ public void write(ExtendedDataOutputStream out) throws IOException
+ {
+ super.write(out);
+ out.writeString(text);
+ }
+
+ @Override
+ public void read(ExtendedDataInputStream in) throws IOException
+ {
+ super.read(in);
+ text = in.readString();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicImpl.java
new file mode 100644
index 0000000000..13fc819620
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicImpl.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.Topic;
+
+public class TopicImpl extends DestinationImpl implements Topic
+{
+ private static final long serialVersionUID = 1L;
+
+ private String topicName;
+
+ public TopicImpl(String topicName)
+ {
+ this.topicName = topicName;
+ }
+
+ public String getTopicName()
+ {
+ return topicName;
+ }
+
+ public String getName()
+ {
+ return topicName;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicPublisherImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicPublisherImpl.java
new file mode 100644
index 0000000000..aada738620
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicPublisherImpl.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Topic;
+import javax.jms.TopicPublisher;
+
+public class TopicPublisherImpl extends MessageProducerImpl implements TopicPublisher
+{
+ public TopicPublisherImpl(SessionImpl session, TopicImpl topic)
+ {
+ super(session, topic);
+ }
+
+ public TopicImpl getTopic()
+ {
+ return (TopicImpl)getDestination();
+ }
+
+ public void publish(Message message) throws JMSException
+ {
+ publish(getTopic(), message, getDeliveryMode(), getPriority(), getTimeToLive());
+ }
+
+ public void publish(Message message, int deliveryMode, int priority, long timeToLive) throws JMSException
+ {
+ publish(getTopic(), message, deliveryMode, priority, timeToLive);
+ }
+
+ public void publish(Topic topic, Message message) throws JMSException
+ {
+ publish(topic, message, getDeliveryMode(), getPriority(), getTimeToLive());
+ }
+
+ public void publish(Topic topic, Message message, int deliveryMode, int priority, long timeToLive)
+ throws JMSException
+ {
+ send(topic, message, deliveryMode, priority, timeToLive);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicSubscriberImpl.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicSubscriberImpl.java
new file mode 100644
index 0000000000..08c4c2184e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/TopicSubscriberImpl.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms;
+
+import javax.jms.TopicSubscriber;
+
+public class TopicSubscriberImpl extends MessageConsumerImpl implements TopicSubscriber
+{
+ private String name;
+
+ private boolean noLocal;
+
+ public TopicSubscriberImpl(SessionImpl session, long id, TopicImpl topic, String name, String messageSelector,
+ boolean noLocal)
+ {
+ super(session, id, topic, messageSelector);
+ this.name = name;
+ this.noLocal = noLocal;
+ }
+
+ public boolean getNoLocal()
+ {
+ return noLocal;
+ }
+
+ public TopicImpl getTopic()
+ {
+ return (TopicImpl)getDestination();
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/bundle/OM.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/bundle/OM.java
new file mode 100644
index 0000000000..26aed04d24
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/bundle/OM.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.bundle;
+
+import org.eclipse.net4j.jms.JMSUtil;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.net4j.jms"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMTracer DEBUG_PROTOCOL = DEBUG.tracer("protocol"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ static void start() throws Exception
+ {
+ JMSUtil.setTransportContainer(IPluginContainer.INSTANCE);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/Messages.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/Messages.java
new file mode 100644
index 0000000000..3ff414fbec
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/Messages.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Victor Roldan Betancort - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.net4j.internal.jms.messages;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.net4j.internal.jms.messages.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/messages.properties b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/messages.properties
new file mode 100644
index 0000000000..3523f413c3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/messages/messages.properties
@@ -0,0 +1,22 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Victor Roldan Betancort - initial API and implementation
+# Eike Stepper - maintenance
+
+ConnectionImpl_0=No transport container available
+ConnectionImpl_1=Server rejected logon request
+ConnectionImpl_2=Server rejected open session request
+MessageConsumerImpl.0=Consumer is configured for asynchronous delivery
+MessageConsumerImpl.1=No message to dispatch
+MessageImpl_11=Values of type {0} are not supported
+MessageImpl_13=Invalid property name {0}
+MessageProducerImpl_0=Null message
+SessionImpl_0=Transaction rolled back by JMS server
+SessionImpl_1=JMS server failed to rolled back transaction
+SessionImpl_2=Message not accepted by JMS server
+SessionImpl_3=Consumer {0} not found. Discarding message.
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSAcknowledgeRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSAcknowledgeRequest.java
new file mode 100644
index 0000000000..12725979fc
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSAcknowledgeRequest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSAcknowledgeRequest extends Request
+{
+ private int sessionID;
+
+ /**
+ * @since 2.0
+ */
+ public JMSAcknowledgeRequest(JMSClientProtocol protocol, int sessionID)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_ACKNOWLEDGE);
+ this.sessionID = sessionID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientMessageRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientMessageRequest.java
new file mode 100644
index 0000000000..e69dbe9138
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientMessageRequest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSClientMessageRequest extends RequestWithConfirmation<String>
+{
+ private MessageImpl message;
+
+ /**
+ * @since 2.0
+ */
+ public JMSClientMessageRequest(JMSClientProtocol protocol, MessageImpl message)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_CLIENT_MESSAGE);
+ this.message = message;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ MessageUtil.write(out, message);
+ }
+
+ @Override
+ protected String confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readString();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientProtocol.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientProtocol.java
new file mode 100644
index 0000000000..6781d677ed
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSClientProtocol.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.internal.jms.ConnectionImpl;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.signal.SignalReactor;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSClientProtocol extends SignalProtocol<ConnectionImpl>
+{
+ /**
+ * @since 2.0
+ */
+ public JMSClientProtocol(ConnectionImpl connection)
+ {
+ super(JMSProtocolConstants.PROTOCOL_NAME);
+ setInfraStructure(connection);
+ }
+
+ @Override
+ protected SignalReactor createSignalReactor(short signalID)
+ {
+ switch (signalID)
+ {
+ case JMSProtocolConstants.SIGNAL_SERVER_MESSAGE:
+ return new JMSServerMessageIndication(this);
+
+ default:
+ return super.createSignalReactor(signalID);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCloseSessionRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCloseSessionRequest.java
new file mode 100644
index 0000000000..d751b7c286
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCloseSessionRequest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSCloseSessionRequest extends RequestWithConfirmation<Boolean>
+{
+ private int sessionID;
+
+ /**
+ * @since 2.0
+ */
+ public JMSCloseSessionRequest(JMSClientProtocol protocol, int sessionID)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_CLOSE_SESSION);
+ this.sessionID = sessionID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCommitRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCommitRequest.java
new file mode 100644
index 0000000000..9e61552ddf
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSCommitRequest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSCommitRequest extends RequestWithConfirmation<String[]>
+{
+ private int sessionID;
+
+ private List<MessageImpl> messages;
+
+ /**
+ * @since 2.0
+ */
+ public JMSCommitRequest(JMSClientProtocol protocol, int sessionID, List<MessageImpl> messages)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_COMMIT);
+ this.sessionID = sessionID;
+ this.messages = messages;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ out.writeInt(messages.size());
+ for (MessageImpl message : messages)
+ {
+ MessageUtil.write(out, message);
+ }
+ }
+
+ @Override
+ protected String[] confirming(ExtendedDataInputStream in) throws Exception
+ {
+ int size = in.readInt();
+ if (size == -1)
+ {
+ return null;
+ }
+
+ String[] messageIDs = new String[size];
+ for (int i = 0; i < size; i++)
+ {
+ messageIDs[i] = in.readString();
+ }
+
+ return messageIDs;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSDeregisterConsumerRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSDeregisterConsumerRequest.java
new file mode 100644
index 0000000000..312b76c621
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSDeregisterConsumerRequest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSDeregisterConsumerRequest extends RequestWithConfirmation<Boolean>
+{
+ private int sessionID;
+
+ private long consumerID;
+
+ /**
+ * @since 2.0
+ */
+ public JMSDeregisterConsumerRequest(JMSClientProtocol protocol, int sessionID, long consumerID)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_DEREGISTER_CONSUMER);
+ this.sessionID = sessionID;
+ this.consumerID = consumerID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ out.writeLong(consumerID);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogoffRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogoffRequest.java
new file mode 100644
index 0000000000..f555a4c92a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogoffRequest.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSLogoffRequest extends Request
+{
+ /**
+ * @since 2.0
+ */
+ public JMSLogoffRequest(JMSClientProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_LOGOFF);
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogonRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogonRequest.java
new file mode 100644
index 0000000000..a175e9e1c8
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSLogonRequest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSLogonRequest extends RequestWithConfirmation<Boolean>
+{
+ private String userName;
+
+ private String password;
+
+ /**
+ * @since 2.0
+ */
+ public JMSLogonRequest(JMSClientProtocol protocol, String userName, String password)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_LOGON);
+ this.userName = userName;
+ this.password = password;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeString(userName);
+ out.writeString(password);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSOpenSessionRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSOpenSessionRequest.java
new file mode 100644
index 0000000000..d12d93fca3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSOpenSessionRequest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSOpenSessionRequest extends RequestWithConfirmation<Boolean>
+{
+ private int sessionID;
+
+ /**
+ * @since 2.0
+ */
+ public JMSOpenSessionRequest(JMSClientProtocol protocol, int sessionID)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_OPEN_SESSION);
+ this.sessionID = sessionID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRecoverRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRecoverRequest.java
new file mode 100644
index 0000000000..c7e5010958
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRecoverRequest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSRecoverRequest extends RequestWithConfirmation<Object>
+{
+ private int sessionID;
+
+ /**
+ * @since 2.0
+ */
+ public JMSRecoverRequest(JMSClientProtocol protocol, int sessionID)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_RECOVER);
+ this.sessionID = sessionID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ }
+
+ @Override
+ protected Object confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRegisterConsumerRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRegisterConsumerRequest.java
new file mode 100644
index 0000000000..d1ad44e456
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRegisterConsumerRequest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.internal.jms.DestinationImpl;
+import org.eclipse.net4j.internal.jms.util.DestinationUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSRegisterConsumerRequest extends RequestWithConfirmation<Long>
+{
+ private int sessionID;
+
+ private DestinationImpl destination;
+
+ private String messageSelector;
+
+ private boolean noLocal;
+
+ private boolean durable;
+
+ /**
+ * @since 2.0
+ */
+ public JMSRegisterConsumerRequest(JMSClientProtocol protocol, int sessionID, DestinationImpl destination,
+ String messageSelector, boolean noLocal, boolean durable)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_REGISTER_CONSUMER);
+ this.sessionID = sessionID;
+ this.destination = destination;
+ this.messageSelector = messageSelector;
+ this.noLocal = noLocal;
+ this.durable = durable;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ DestinationUtil.write(out, destination);
+ out.writeString(messageSelector);
+ out.writeBoolean(noLocal);
+ out.writeBoolean(durable);
+ }
+
+ @Override
+ protected Long confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readLong();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRollbackRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRollbackRequest.java
new file mode 100644
index 0000000000..18c6e9beb4
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSRollbackRequest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSRollbackRequest extends RequestWithConfirmation<Boolean>
+{
+ private int sessionID;
+
+ /**
+ * @since 2.0
+ */
+ public JMSRollbackRequest(JMSClientProtocol protocol, int sessionID)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_ROLLBACK);
+ this.sessionID = sessionID;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ out.writeInt(sessionID);
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in) throws Exception
+ {
+ return in.readBoolean();
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSServerMessageIndication.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSServerMessageIndication.java
new file mode 100644
index 0000000000..3f1da2b156
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSServerMessageIndication.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.internal.jms.ConnectionImpl;
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.util.MessageUtil;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.Indication;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSServerMessageIndication extends Indication
+{
+ /**
+ * @since 2.0
+ */
+ public JMSServerMessageIndication(JMSClientProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_SERVER_MESSAGE);
+ }
+
+ @Override
+ protected void indicating(ExtendedDataInputStream in) throws Exception
+ {
+ int sessionID = in.readInt();
+ long consumerID = in.readLong();
+ MessageImpl message = MessageUtil.read(in);
+ JMSClientProtocol protocol = (JMSClientProtocol)getProtocol();
+ ConnectionImpl connection = protocol.getInfraStructure();
+ connection.handleMessageFromSignal(sessionID, consumerID, message);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSSyncRequest.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSSyncRequest.java
new file mode 100644
index 0000000000..cf62439a22
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/protocol/JMSSyncRequest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.protocol;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSSyncRequest extends RequestWithConfirmation<Long>
+{
+ private long clientTime0;
+
+ /**
+ * @since 2.0
+ */
+ public JMSSyncRequest(JMSClientProtocol protocol)
+ {
+ super(protocol, JMSProtocolConstants.SIGNAL_SYNC);
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws Exception
+ {
+ clientTime0 = System.currentTimeMillis();
+ }
+
+ @Override
+ protected Long confirming(ExtendedDataInputStream in) throws Exception
+ {
+ long serverTime = in.readLong();
+ long clientTime1 = System.currentTimeMillis();
+ long roundTripDuration = clientTime1 - clientTime0;
+ return serverTime + roundTripDuration / 2;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/DestinationUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/DestinationUtil.java
new file mode 100644
index 0000000000..711d978525
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/DestinationUtil.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.util;
+
+import org.eclipse.net4j.internal.jms.DestinationImpl;
+import org.eclipse.net4j.internal.jms.QueueImpl;
+import org.eclipse.net4j.internal.jms.TopicImpl;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Queue;
+import javax.jms.Topic;
+
+import java.io.IOException;
+
+public final class DestinationUtil
+{
+ private DestinationUtil()
+ {
+ }
+
+ public static byte getType(Destination destination)
+ {
+ if (destination instanceof Queue)
+ {
+ return JMSProtocolConstants.DESTINATION_TYPE_QUEUE;
+ }
+
+ if (destination instanceof Topic)
+ {
+ return JMSProtocolConstants.DESTINATION_TYPE_TOPIC;
+ }
+
+ if (destination == null)
+ {
+ return JMSProtocolConstants.DESTINATION_TYPE_NULL;
+ }
+
+ throw new IllegalArgumentException("destination: " + destination); //$NON-NLS-1$
+ }
+
+ public static String getTypeName(byte type)
+ {
+ switch (type)
+ {
+ case JMSProtocolConstants.DESTINATION_TYPE_NULL:
+ return "NULL_DESTINATION"; //$NON-NLS-1$
+
+ case JMSProtocolConstants.DESTINATION_TYPE_QUEUE:
+ return "QUEUE_DESTINATION"; //$NON-NLS-1$
+
+ case JMSProtocolConstants.DESTINATION_TYPE_TOPIC:
+ return "TOPIC_DESTINATION"; //$NON-NLS-1$
+ }
+
+ throw new IllegalArgumentException("type: " + type); //$NON-NLS-1$
+ }
+
+ public static String getName(Destination destination) throws JMSException
+ {
+ byte type = getType(destination);
+ switch (type)
+ {
+ case JMSProtocolConstants.DESTINATION_TYPE_QUEUE:
+ return ((Queue)destination).getQueueName();
+
+ case JMSProtocolConstants.DESTINATION_TYPE_TOPIC:
+ return ((Topic)destination).getTopicName();
+ }
+
+ return null;
+ }
+
+ public static DestinationImpl create(byte type, String name)
+ {
+ switch (type)
+ {
+ case JMSProtocolConstants.DESTINATION_TYPE_QUEUE:
+ return new QueueImpl(name);
+
+ case JMSProtocolConstants.DESTINATION_TYPE_TOPIC:
+ return new TopicImpl(name);
+ }
+
+ return null;
+ }
+
+ public static DestinationImpl copy(Destination source) throws JMSException
+ {
+ byte type = getType(source);
+ switch (type)
+ {
+ case JMSProtocolConstants.DESTINATION_TYPE_QUEUE:
+ return new QueueImpl(((Queue)source).getQueueName());
+
+ case JMSProtocolConstants.DESTINATION_TYPE_TOPIC:
+ return new TopicImpl(((Topic)source).getTopicName());
+ }
+
+ return null;
+ }
+
+ public static DestinationImpl convert(Destination source) throws JMSException
+ {
+ if (source instanceof DestinationImpl)
+ {
+ return (DestinationImpl)source;
+ }
+
+ return copy(source);
+ }
+
+ public static void write(ExtendedDataOutputStream out, DestinationImpl destination) throws IOException
+ {
+ byte type = getType(destination);
+ out.writeByte(type);
+ if (type != JMSProtocolConstants.DESTINATION_TYPE_NULL)
+ {
+ out.writeString(destination.getName());
+ }
+ }
+
+ public static DestinationImpl read(ExtendedDataInputStream in) throws IOException
+ {
+ byte type = in.readByte();
+ String name = null;
+ if (type != JMSProtocolConstants.DESTINATION_TYPE_NULL)
+ {
+ name = in.readString();
+ }
+
+ return create(type, name);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/MessageUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/MessageUtil.java
new file mode 100644
index 0000000000..5b2bf45e86
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/MessageUtil.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.util;
+
+import org.eclipse.net4j.internal.jms.BytesMessageImpl;
+import org.eclipse.net4j.internal.jms.MapMessageImpl;
+import org.eclipse.net4j.internal.jms.MessageImpl;
+import org.eclipse.net4j.internal.jms.ObjectMessageImpl;
+import org.eclipse.net4j.internal.jms.StreamMessageImpl;
+import org.eclipse.net4j.internal.jms.TextMessageImpl;
+import org.eclipse.net4j.internal.jms.bundle.OM;
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import javax.jms.BytesMessage;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.StreamMessage;
+import javax.jms.TextMessage;
+
+import java.io.IOException;
+
+public final class MessageUtil
+{
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, MessageUtil.class);
+
+ private MessageUtil()
+ {
+ }
+
+ public static byte getType(Message message)
+ {
+ if (message instanceof BytesMessage)
+ {
+ return JMSProtocolConstants.MESSAGE_TYPE_BYTES;
+ }
+
+ if (message instanceof MapMessage)
+ {
+ return JMSProtocolConstants.MESSAGE_TYPE_MAP;
+ }
+
+ if (message instanceof ObjectMessage)
+ {
+ return JMSProtocolConstants.MESSAGE_TYPE_OBJECT;
+ }
+
+ if (message instanceof StreamMessage)
+ {
+ return JMSProtocolConstants.MESSAGE_TYPE_STREAM;
+ }
+
+ if (message instanceof TextMessage)
+ {
+ return JMSProtocolConstants.MESSAGE_TYPE_TEXT;
+ }
+
+ throw new IllegalArgumentException("message: " + message); //$NON-NLS-1$
+ }
+
+ public static String getTypeName(byte type)
+ {
+ switch (type)
+ {
+ case JMSProtocolConstants.MESSAGE_TYPE_BYTES:
+ return "BYTES_MESSAGE"; //$NON-NLS-1$
+
+ case JMSProtocolConstants.MESSAGE_TYPE_MAP:
+ return "MAP_MESSAGE"; //$NON-NLS-1$
+
+ case JMSProtocolConstants.MESSAGE_TYPE_OBJECT:
+ return "OBJECT_MESSAGE"; //$NON-NLS-1$
+
+ case JMSProtocolConstants.MESSAGE_TYPE_STREAM:
+ return "STREAM_MESSAGE"; //$NON-NLS-1$
+
+ case JMSProtocolConstants.MESSAGE_TYPE_TEXT:
+ return "TEXT_MESSAGE"; //$NON-NLS-1$
+ }
+
+ throw new IllegalArgumentException("type: " + type); //$NON-NLS-1$
+ }
+
+ public static MessageImpl create(byte type)
+ {
+ switch (type)
+ {
+ case JMSProtocolConstants.MESSAGE_TYPE_BYTES:
+ return new BytesMessageImpl();
+
+ case JMSProtocolConstants.MESSAGE_TYPE_MAP:
+ return new MapMessageImpl();
+
+ case JMSProtocolConstants.MESSAGE_TYPE_OBJECT:
+ return new ObjectMessageImpl();
+
+ case JMSProtocolConstants.MESSAGE_TYPE_STREAM:
+ return new StreamMessageImpl();
+
+ case JMSProtocolConstants.MESSAGE_TYPE_TEXT:
+ return new TextMessageImpl();
+ }
+
+ throw new IllegalArgumentException("type: " + type); //$NON-NLS-1$
+ }
+
+ public static MessageImpl copy(Message source) throws JMSException
+ {
+ byte type = getType(source);
+ MessageImpl result = create(type);
+ result.populate(source);
+ return result;
+ }
+
+ public static MessageImpl convert(Message source) throws JMSException
+ {
+ if (source instanceof MessageImpl)
+ {
+ return (MessageImpl)source;
+ }
+
+ return copy(source);
+ }
+
+ public static void write(ExtendedDataOutputStream out, MessageImpl message) throws IOException
+ {
+ byte type = getType(message);
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Writing {0}", getTypeName(type)); //$NON-NLS-1$
+ }
+
+ out.writeByte(type);
+ message.write(out);
+ }
+
+ public static MessageImpl read(ExtendedDataInputStream in) throws IOException
+ {
+ byte type = in.readByte();
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Reading {0}", getTypeName(type)); //$NON-NLS-1$
+ }
+
+ MessageImpl message = create(type);
+ message.read(in);
+ return message;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/TypeUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/TypeUtil.java
new file mode 100644
index 0000000000..99d260008b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/internal/jms/util/TypeUtil.java
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.jms.util;
+
+import org.eclipse.net4j.jms.JMSProtocolConstants;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import javax.jms.MessageFormatException;
+
+import java.io.IOException;
+
+public final class TypeUtil
+{
+ private TypeUtil()
+ {
+ }
+
+ public static boolean getBoolean(Object value) throws MessageFormatException
+ {
+ if (value instanceof Boolean)
+ {
+ return (Boolean)value;
+ }
+ else if (value instanceof String)
+ {
+ return Boolean.valueOf((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(boolean.class, value));
+ }
+
+ public static byte getByte(Object value) throws MessageFormatException
+ {
+ if (value instanceof Byte)
+ {
+ return (Byte)value;
+ }
+ else if (value instanceof String)
+ {
+ return Byte.parseByte((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(byte.class, value));
+ }
+
+ public static short getShort(Object value) throws MessageFormatException
+ {
+ if (value instanceof Short)
+ {
+ return (Short)value;
+ }
+ else if (value instanceof Byte)
+ {
+ return (Byte)value;
+ }
+ else if (value instanceof String)
+ {
+ return Short.parseShort((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(short.class, value));
+ }
+
+ public static char getChar(Object value) throws MessageFormatException
+ {
+ if (value instanceof Character)
+ {
+ return (Character)value;
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(char.class, value));
+ }
+
+ public static int getInt(Object value) throws MessageFormatException
+ {
+ if (value instanceof Integer)
+ {
+ return (Integer)value;
+ }
+ else if (value instanceof Short)
+ {
+ return (Short)value;
+ }
+ else if (value instanceof Byte)
+ {
+ return (Byte)value;
+ }
+ else if (value instanceof String)
+ {
+ return Integer.parseInt((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(int.class, value));
+ }
+
+ public static long getLong(Object value) throws MessageFormatException
+ {
+ if (value instanceof Long)
+ {
+ return (Long)value;
+ }
+ else if (value instanceof Integer)
+ {
+ return (Integer)value;
+ }
+ else if (value instanceof Short)
+ {
+ return (Short)value;
+ }
+ else if (value instanceof Byte)
+ {
+ return (Byte)value;
+ }
+ else if (value instanceof String)
+ {
+ return Long.parseLong((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(long.class, value));
+ }
+
+ public static float getFloat(Object value) throws MessageFormatException
+ {
+ if (value instanceof Float)
+ {
+ return (Float)value;
+ }
+ else if (value instanceof String)
+ {
+ return Float.parseFloat((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(float.class, value));
+ }
+
+ public static double getDouble(Object value) throws MessageFormatException
+ {
+ if (value instanceof Double)
+ {
+ return (Double)value;
+ }
+ else if (value instanceof Float)
+ {
+ return (Float)value;
+ }
+ else if (value instanceof String)
+ {
+ return Double.parseDouble((String)value);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(double.class, value));
+ }
+
+ public static String getString(Object value) throws MessageFormatException
+ {
+ if (value instanceof byte[])
+ {
+ throw new MessageFormatException(conversionProblem(String.class, value));
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ return String.valueOf(value);
+ }
+
+ public static byte[] getBytes(Object value) throws MessageFormatException
+ {
+ if (value instanceof byte[])
+ {
+ byte[] bytes = (byte[])value;
+ byte[] result = new byte[bytes.length];
+ System.arraycopy(bytes, 0, result, 0, bytes.length);
+ }
+ else if (value == null)
+ {
+ throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
+ }
+
+ throw new MessageFormatException(conversionProblem(byte[].class, value));
+ }
+
+ public static void write(ExtendedDataOutputStream out, Object value) throws IOException
+ {
+ if (value instanceof Boolean)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_BOOLEAN);
+ out.writeBoolean((Boolean)value);
+ }
+ else if (value instanceof Byte)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_BYTE);
+ out.writeByte((Byte)value);
+ }
+ else if (value instanceof Character)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_CHAR);
+ out.writeChar((Character)value);
+ }
+ else if (value instanceof Double)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_DOUBLE);
+ out.writeDouble((Double)value);
+ }
+ else if (value instanceof Float)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_FLOAT);
+ out.writeFloat((Float)value);
+ }
+ else if (value instanceof Long)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_LONG);
+ out.writeLong((Long)value);
+ }
+ else if (value instanceof Short)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_SHORT);
+ out.writeShort((Short)value);
+ }
+ else if (value instanceof String)
+ {
+ out.writeByte(JMSProtocolConstants.TYPE_STRING);
+ out.writeString((String)value);
+ }
+
+ throw new IllegalArgumentException("value: " + value); //$NON-NLS-1$
+ }
+
+ public static Object read(ExtendedDataInputStream in) throws IOException
+ {
+ byte type = in.readByte();
+ switch (type)
+ {
+ case JMSProtocolConstants.TYPE_BOOLEAN:
+ return in.readBoolean();
+ case JMSProtocolConstants.TYPE_BYTE:
+ return in.readByte();
+ case JMSProtocolConstants.TYPE_CHAR:
+ return in.readChar();
+ case JMSProtocolConstants.TYPE_DOUBLE:
+ return in.readDouble();
+ case JMSProtocolConstants.TYPE_FLOAT:
+ return in.readFloat();
+ case JMSProtocolConstants.TYPE_LONG:
+ return in.readLong();
+ case JMSProtocolConstants.TYPE_SHORT:
+ return in.readShort();
+ case JMSProtocolConstants.TYPE_STRING:
+ return in.readString();
+ }
+
+ throw new IOException("Invalid type: " + type); //$NON-NLS-1$
+ }
+
+ private static String conversionProblem(Class<?> type, Object value)
+ {
+ return "Cannot convert values of type " + value.getClass().getName() + " to " + type.getName(); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSAdminProtocolConstants.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSAdminProtocolConstants.java
new file mode 100644
index 0000000000..72d23ce783
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSAdminProtocolConstants.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms;
+
+/**
+ * @author Eike Stepper
+ */
+public interface JMSAdminProtocolConstants
+{
+ public static final String PROTOCOL_NAME = "jmsadmin"; //$NON-NLS-1$
+
+ public static final short SIGNAL_CREATE_DESTINATION = 1;
+
+ public static final byte DESTINATION_TYPE_QUEUE = JMSProtocolConstants.DESTINATION_TYPE_QUEUE;
+
+ public static final byte DESTINATION_TYPE_TOPIC = JMSProtocolConstants.DESTINATION_TYPE_TOPIC;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSInitialContext.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSInitialContext.java
new file mode 100644
index 0000000000..a58d7e24ac
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSInitialContext.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms;
+
+import org.eclipse.net4j.internal.jms.ConnectionFactoryImpl;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+import javax.naming.InitialContext;
+import javax.naming.Name;
+import javax.naming.NamingException;
+
+import java.util.Hashtable;
+
+/**
+ * @author Eike Stepper
+ */
+public class JMSInitialContext extends InitialContext
+{
+ private IManagedContainer transportContainer;
+
+ public JMSInitialContext(IManagedContainer transportContainer) throws NamingException
+ {
+ this.transportContainer = transportContainer;
+ }
+
+ public JMSInitialContext(boolean lazy, IManagedContainer transportContainer) throws NamingException
+ {
+ super(lazy);
+ this.transportContainer = transportContainer;
+ }
+
+ public JMSInitialContext(Hashtable<?, ?> environment, IManagedContainer transportContainer) throws NamingException
+ {
+ super(environment);
+ this.transportContainer = transportContainer;
+ }
+
+ public IManagedContainer getTransportContainer()
+ {
+ return transportContainer;
+ }
+
+ @Override
+ public Object lookup(Name name) throws NamingException
+ {
+ return postProcess(super.lookup(name));
+ }
+
+ @Override
+ public Object lookup(String name) throws NamingException
+ {
+ return postProcess(super.lookup(name));
+ }
+
+ @Override
+ public Object lookupLink(Name name) throws NamingException
+ {
+ return postProcess(super.lookupLink(name));
+ }
+
+ @Override
+ public Object lookupLink(String name) throws NamingException
+ {
+ return postProcess(super.lookupLink(name));
+ }
+
+ protected Object postProcess(Object object)
+ {
+ if (object instanceof ConnectionFactoryImpl)
+ {
+ ConnectionFactoryImpl factory = (ConnectionFactoryImpl)object;
+ factory.setTransportContainer(transportContainer);
+ }
+
+ return object;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSProtocolConstants.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSProtocolConstants.java
new file mode 100644
index 0000000000..34f794f5f3
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSProtocolConstants.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms;
+
+/**
+ * @author Eike Stepper
+ */
+public interface JMSProtocolConstants
+{
+ public static final String PROTOCOL_NAME = "jms"; //$NON-NLS-1$
+
+ // Signals
+
+ public static final short SIGNAL_SYNC = 1;
+
+ public static final short SIGNAL_LOGON = 2;
+
+ public static final short SIGNAL_LOGOFF = 3;
+
+ public static final short SIGNAL_OPEN_SESSION = 4;
+
+ public static final short SIGNAL_CLOSE_SESSION = 5;
+
+ public static final short SIGNAL_REGISTER_CONSUMER = 6;
+
+ public static final short SIGNAL_DEREGISTER_CONSUMER = 7;
+
+ public static final short SIGNAL_CLIENT_MESSAGE = 8;
+
+ public static final short SIGNAL_SERVER_MESSAGE = 9;
+
+ public static final short SIGNAL_ACKNOWLEDGE = 10;
+
+ public static final short SIGNAL_RECOVER = 11;
+
+ public static final short SIGNAL_COMMIT = 12;
+
+ public static final short SIGNAL_ROLLBACK = 13;
+
+ // Message Types
+
+ public static final byte MESSAGE_TYPE_BYTES = 1;
+
+ public static final byte MESSAGE_TYPE_MAP = 2;
+
+ public static final byte MESSAGE_TYPE_OBJECT = 3;
+
+ public static final byte MESSAGE_TYPE_STREAM = 4;
+
+ public static final byte MESSAGE_TYPE_TEXT = 5;
+
+ // Destination Types
+
+ public static final byte DESTINATION_TYPE_NULL = 0;
+
+ public static final byte DESTINATION_TYPE_QUEUE = 1;
+
+ public static final byte DESTINATION_TYPE_TOPIC = 2;
+
+ // Data Types
+
+ public static final byte TYPE_BOOLEAN = 1;
+
+ public static final byte TYPE_BYTE = 2;
+
+ public static final byte TYPE_CHAR = 3;
+
+ public static final byte TYPE_DOUBLE = 4;
+
+ public static final byte TYPE_FLOAT = 5;
+
+ public static final byte TYPE_LONG = 6;
+
+ public static final byte TYPE_SHORT = 7;
+
+ public static final byte TYPE_STRING = 8;
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSUtil.java b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSUtil.java
new file mode 100644
index 0000000000..0b4305c814
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/jms/src/org/eclipse/net4j/jms/JMSUtil.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.jms;
+
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+/**
+ * @author Eike Stepper
+ */
+public final class JMSUtil
+{
+ private static IManagedContainer transportContainer;
+
+ private JMSUtil()
+ {
+ }
+
+ public static Context createInitialContext() throws NamingException
+ {
+ if (transportContainer == null)
+ {
+ throw new IllegalStateException("transportContainer == null"); //$NON-NLS-1$
+ }
+
+ return new JMSInitialContext(transportContainer);
+ }
+
+ public static IManagedContainer getTransportContainer()
+ {
+ return transportContainer;
+ }
+
+ public static void setTransportContainer(IManagedContainer transportContainer)
+ {
+ JMSUtil.transportContainer = transportContainer;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.examples.installer/icons/full/ctool16/NewEMFExample.gif b/plugins/org.eclipse.net4j.examples.installer/icons/full/ctool16/NewEMFExample.gif
new file mode 100644
index 0000000000..9acbbc69a4
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/icons/full/ctool16/NewEMFExample.gif
Binary files differ
diff --git a/plugins/org.eclipse.net4j.examples.installer/icons/full/wizban/NewEMFExample.gif b/plugins/org.eclipse.net4j.examples.installer/icons/full/wizban/NewEMFExample.gif
new file mode 100644
index 0000000000..e2498313a5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/icons/full/wizban/NewEMFExample.gif
Binary files differ
diff --git a/plugins/org.eclipse.net4j.examples.installer/plugin.properties b/plugins/org.eclipse.net4j.examples.installer/plugin.properties
new file mode 100644
index 0000000000..0352bb9da9
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/plugin.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = Net4j Signalling Platform Examples Installer
+providerName = Eclipse Modeling Project
+
+Net4jExampleCategory_name = Net4j Signalling Platform
+
+ExampleBuddiesWizard_name = Net4j Chat Buddies Example
+ExampleBuddiesWizard_desc = Create plug-in projects for a complete distributed chat and extensible collaboration system.
+ExampleProject_buddies_desc = This project contains the client-side core.
+ExampleProject_buddies.chat_desc = This project contains the chat core support.
+ExampleProject_buddies.chat.ui_desc = This project contains the chat UI.
+ExampleProject_buddies.common_desc = This project contains the common framework.
+ExampleProject_buddies.server_desc = This project contains the server.
+ExampleProject_buddies.ui_desc = This project contains the generic UI.
+
+ExampleJMSWizard_name = Net4j JMS Provider Example
+ExampleJMSWizard_desc = Create plug-in projects for a complete JMS Provider implemented on top of the Net4j Signalling Platform.
+ExampleProject_jms_desc = This project contains the client-side JMS implementation.
+ExampleProject_jms.admin_desc = This project contains a admisnistrative facility to create JMS queues and topics.
+ExampleProject_jms.api_desc = This project contains the JMS specification API.
+ExampleProject_jms.server_desc = This project contains the JMS server implementation.
+ExampleProject_jms.server.jdbc_desc = This project contains JDBC persistence support for the JMS server.
+ExampleProject_jms.tests_desc = This project contains the tests.
diff --git a/plugins/org.eclipse.net4j.examples.installer/plugin.xml b/plugins/org.eclipse.net4j.examples.installer/plugin.xml
new file mode 100644
index 0000000000..71e5592569
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/plugin.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.ui.newWizards">
+ <category
+ id="org.eclipse.net4j.examples"
+ name="%Net4jExampleCategory_name"
+ parentCategory="org.eclipse.ui.Examples">
+ </category>
+ <wizard
+ canFinishEarly="true"
+ category="org.eclipse.ui.Examples/org.eclipse.net4j.examples"
+ class="org.eclipse.emf.common.ui.wizard.ExampleInstallerWizard"
+ icon="icons/full/ctool16/NewEMFExample.gif"
+ id="org.eclipse.net4j.examples.ExampleBuddiesWizard"
+ name="%ExampleBuddiesWizard_name"
+ project="true">
+ <description>%ExampleBuddiesWizard_desc</description>
+ </wizard>
+ <wizard
+ canFinishEarly="true"
+ category="org.eclipse.ui.Examples/org.eclipse.net4j.examples"
+ class="org.eclipse.emf.common.ui.wizard.ExampleInstallerWizard"
+ icon="icons/full/ctool16/NewEMFExample.gif"
+ id="org.eclipse.net4j.examples.ExampleJMSWizard"
+ name="%ExampleJMSWizard_name"
+ project="true">
+ <description>%ExampleJMSWizard_desc</description>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.emf.common.ui.examples">
+ <example
+ id="org.eclipse.net4j.examples.ExampleBuddies"
+ wizardID="org.eclipse.net4j.examples.ExampleBuddiesWizard"
+ pageImage="icons/full/wizban/NewEMFExample.gif">
+ <projectDescriptor
+ name="org.eclipse.net4j.examples.buddies"
+ contentURI="examples/buddies/"
+ description="%ExampleProject_buddies_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.examples.buddies.chat"
+ contentURI="examples/buddies.chat/"
+ description="%ExampleProject_buddies.chat_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.examples.buddies.chat.ui"
+ contentURI="examples/buddies.chat.ui/"
+ description="%ExampleProject_buddies.chat.ui_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.examples.buddies.common"
+ contentURI="examples/buddies.buddies.common/"
+ description="%ExampleProject_buddies.buddies.common_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.examples.buddies.server"
+ contentURI="examples/buddies.buddies.server/"
+ description="%ExampleProject_buddies.buddies.server_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.examples.buddies.ui"
+ contentURI="examples/buddies.buddies.ui/"
+ description="%ExampleProject_buddies.buddies.ui_desc"/>
+ </example>
+ <example
+ id="org.eclipse.net4j.examples.ExampleJMS"
+ wizardID="org.eclipse.net4j.examples.ExampleJMSWizard"
+ pageImage="icons/full/wizban/NewEMFExample.gif">
+ <projectDescriptor
+ name="org.eclipse.net4j.jms"
+ contentURI="examples/jms/"
+ description="%ExampleProject_jms_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.jms.admin"
+ contentURI="examples/jms.admin/"
+ description="%ExampleProject_jms.admin_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.jms.api"
+ contentURI="examples/jms.api/"
+ description="%ExampleProject_jms.api_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.jms.server"
+ contentURI="examples/jms.server/"
+ description="%ExampleProject_jms.server_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.jms.server.jdbc"
+ contentURI="examples/jms.server.jdbc/"
+ description="%ExampleProject_jms.server.jdbc_desc"/>
+ <projectDescriptor
+ name="org.eclipse.net4j.jms.tests"
+ contentURI="examples/jms.tests/"
+ description="%ExampleProject_jms.tests_desc"/>
+ </example>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.net4j.examples.installer/update.ant b/plugins/org.eclipse.net4j.examples.installer/update.ant
new file mode 100644
index 0000000000..e9de02b38e
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/update.ant
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+<project name="UpdateExamplesInstaller" default="main" basedir="..">
+
+ <import file="../org.eclipse.net4j.examples.installer/updateLib.ant"/>
+
+ <target name="main">
+ <update-example example="org.eclipse.net4j.buddies" target="buddies"/>
+ <update-example example="org.eclipse.net4j.buddies.chat" target="buddies.chat"/>
+ <update-example example="org.eclipse.net4j.buddies.chat.ui" target="buddies.chat.ui"/>
+ <update-example example="org.eclipse.net4j.buddies.common" target="buddies.common"/>
+ <update-example example="org.eclipse.net4j.buddies.server" target="buddies.server"/>
+ <update-example example="org.eclipse.net4j.buddies.ui" target="buddies.ui"/>
+
+ <update-example example="org.eclipse.net4j.jms" target="jms"/>
+ <update-example example="org.eclipse.net4j.jms.admin" target="jms.admin"/>
+ <update-example example="org.eclipse.net4j.jms.api" target="jms.api"/>
+ <update-example example="org.eclipse.net4j.jms.server" target="jms.server"/>
+ <update-example example="org.eclipse.net4j.jms.server.jdbc" target="jms.server.jdbc"/>
+ <update-example example="org.eclipse.net4j.jms.tests" target="jms.tests"/>
+ </target>
+
+</project>
diff --git a/plugins/org.eclipse.net4j.examples.installer/updateLib.ant b/plugins/org.eclipse.net4j.examples.installer/updateLib.ant
new file mode 100644
index 0000000000..eec3d4bdb2
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/updateLib.ant
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+<project name="UpdateLib" basedir="..">
+
+ <macrodef name="update-example">
+ <attribute name="example" />
+ <attribute name="target" />
+ <sequential>
+ <delete includeemptydirs="true" failonerror="false">
+ <fileset dir="org.eclipse.net4j.examples.installer/examples/@{target}">
+ <include name="**" />
+ </fileset>
+ </delete>
+
+ <copy todir="org.eclipse.net4j.examples.installer/examples/@{target}" overwrite="true">
+ <fileset dir="@{example}">
+ <exclude name="update.ant" />
+ <exclude name="database/" />
+ <exclude name="bin/" />
+ <include name="**" />
+ </fileset>
+ </copy>
+ </sequential>
+ </macrodef>
+
+</project>

Back to the top