package com.tibco.as.spacebar.ui.model; import com.tibco.as.space.ASCommon; import com.tibco.as.space.ASException; import com.tibco.as.space.Member.DistributionRole; import com.tibco.as.space.Member.ManagementRole; import com.tibco.as.space.MemberDef; import com.tibco.as.space.Metaspace; import com.tibco.as.space.SpaceDef; import com.tibco.as.space.listener.MetaspaceMemberListener; import com.tibco.as.space.listener.SpaceDefListener; import com.tibco.as.space.listener.SpaceMemberListener; import com.tibco.as.spacebar.ui.DialogAuthenticationCallback; import com.tibco.as.spacebar.ui.SpaceBarPlugin; import com.tibco.as.util.Utils; public class Connection { private Metaspace ms; private com.tibco.as.spacebar.ui.model.Metaspace metaspace; public Connection(com.tibco.as.spacebar.ui.model.Metaspace metaspace) { this.metaspace = metaspace; } public void open() throws Exception { ms = Utils.getMetaspace(metaspace.getMetaspaceName()); if (ms == null) { MemberDef memberDef = MemberDef.create(); if (metaspace.getMemberName() != null) { memberDef.setMemberName(metaspace.getMemberName()); } if (metaspace.getDiscovery() != null) { if (metaspace.isRemote()) { memberDef.setRemoteDiscovery(metaspace.getDiscovery()); } else { memberDef.setDiscovery(metaspace.getDiscovery()); } } if (metaspace.getListen() != null) { memberDef.setListen(metaspace.getListen()); } if (Utils.hasMethod(MemberDef.class, "setConnectTimeout")) { memberDef.setConnectTimeout(metaspace.getTimeout()); } if (Utils.hasMethod(MemberDef.class, "setSecurityTokenFile")) { memberDef .setSecurityTokenFile(metaspace.getSecurityTokenFile()); } if (Utils.hasMethod(MemberDef.class, "setAuthenticationCallback")) { memberDef .setAuthenticationCallback(new DialogAuthenticationCallback( SpaceBarPlugin.getShell())); } if (Utils.hasMethod(MemberDef.class, "setIdentityPassword")) { if (metaspace.getIdentityPassword() != null) { memberDef.setIdentityPassword(metaspace .getIdentityPassword().toCharArray()); } } ms = Metaspace.connect(metaspace.getMetaspaceName(), memberDef); } ms.listenSpaceMembers(new SpaceMemberListener() { @Override public void onUpdate(String spaceName, com.tibco.as.space.Member member, DistributionRole role) { Spaces spaces = metaspace.getSpaces(); Space space = (Space) spaces.getChild(spaceName); if (space == null) { return; } SpaceMembers members = space.getMembers(); SpaceMember spaceMember = (SpaceMember) members .getMemberById(member.getId()); if (spaceMember == null) { onJoin(spaceName, member, role); } else { spaceMember.setMember(member); spaceMember.setDistributionRole(role); } } @Override public void onLeave(String spaceName, com.tibco.as.space.Member member) { Spaces spaces = metaspace.getSpaces(); Space space = (Space) spaces.getChild(spaceName); if (space == null) { return; } SpaceMembers members = space.getMembers(); Member spaceMember = members.getMemberById(member.getId()); if (spaceMember == null) { return; } members.removeChild(spaceMember); } @Override public void onJoin(String spaceName, com.tibco.as.space.Member member, DistributionRole role) { Spaces spaces = metaspace.getSpaces(); Space space = (Space) spaces.getChild(spaceName); if (space == null) { return; } SpaceMembers members = space.getMembers(); SpaceMember child = new SpaceMember(); child.setMembers(members); child.setMember(member); child.setSelf(ms.getSelfMember().getName() .equals(member.getName())); child.setDistributionRole(role); members.addChild(child); } }); ms.listenMetaspaceMembers(new MetaspaceMemberListener() { @Override public void onUpdate(com.tibco.as.space.Member member, ManagementRole role) { MetaspaceMembers members = metaspace.getMembers(); Member metaspaceMember = members.getMemberById(member.getId()); if (metaspaceMember == null) { onJoin(member, role); } else { metaspaceMember.setMember(member); } } @Override public void onLeave(com.tibco.as.space.Member member) { MetaspaceMembers members = metaspace.getMembers(); Member metaspaceMember = members.getMemberById(member.getId()); if (metaspaceMember == null) { return; } members.removeChild(metaspaceMember); } @Override public void onJoin(com.tibco.as.space.Member member, ManagementRole role) { MetaspaceMembers members = metaspace.getMembers(); MetaspaceMember child = new MetaspaceMember(); child.setMembers(members); child.setMember(member); child.setSelf(ms.getSelfMember().getId().equals(member.getId())); members.addChild(child); } }); ms.listenSpaceDefs(new SpaceDefListener() { @Override public void onDrop(SpaceDef spaceDef) { metaspace.getSpaces().removeChild(spaceDef.getName()); } @Override public void onDefine(SpaceDef spaceDef) { Space space = new Space(); space.setSpaces(metaspace.getSpaces()); space.setSpaceDef(spaceDef); metaspace.getSpaces().addChild(space); SpaceMembers members = space.getMembers(); String spaceName = spaceDef.getName(); try { for (com.tibco.as.space.Member member : ms .getSpaceMembers(spaceName)) { SpaceMember child = new SpaceMember(); child.setMembers(members); child.setMember(member); child.setSelf(ms.getSelfMember().getId() .equals(member.getId())); child.setDistributionRole(member .getDistributionRole(spaceName)); members.addChild(child); } } catch (ASException e) { SpaceBarPlugin.logException("Could not get space members", e); } } @Override public void onAlter(SpaceDef oldSpaceDef, SpaceDef newSpaceDef) { String oldSpaceName = oldSpaceDef.getName(); Space space = metaspace.getSpaces().getChild(oldSpaceName); if (oldSpaceName.equals(newSpaceDef.getName())) { if (space == null) { onDefine(newSpaceDef); } else { space.setSpaceDef(newSpaceDef); } } else { metaspace.removeChild(oldSpaceName); onDefine(newSpaceDef); } } }); } public void close() throws Exception { if (ms != null) { ms.closeAll(); ms = null; } } public String getMetaspaceName() { return ms == null ? null : ms.getName(); } public Metaspace getMetaspace() { return ASCommon.getMetaspace(getMetaspaceName()); } public boolean isConnected() { return ms != null; } }