private void populateFieldsPanel() { fieldsPanel.removeAll(); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.anchor = GridBagConstraints.NORTHWEST; boolean first = true; for (ServerDescriptor server : orderedServers) { gbc.insets.left = 0; gbc.weightx = 0.0; if (!first) { gbc.insets.top = UIFactory.TOP_INSET_SECONDARY_FIELD; } gbc.gridwidth = 4; fieldsPanel.add(hmLabels.get(server.getId()), gbc); gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD; gbc.gridwidth--; fieldsPanel.add(hmFields.get(server.getId()), gbc); gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD; gbc.gridwidth = GridBagConstraints.RELATIVE; fieldsPanel.add(hmCbs.get(server.getId()), gbc); gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.weightx = 1.0; fieldsPanel.add(Box.createHorizontalGlue(), gbc); first = false; } addVerticalGlue(fieldsPanel); }
/** * Returns a representation of a base DN for a set of servers. * * @param baseDN the base DN. * @param servers the servers. * @return a representation of a base DN for a set of servers. */ public static String getSuffixDisplay(String baseDN, Set<ServerDescriptor> servers) { StringBuilder sb = new StringBuilder(); sb.append(baseDN); for (ServerDescriptor server : servers) { sb.append(Constants.LINE_SEPARATOR + " "); sb.append(server.getHostPort(true)); } return sb.toString(); }
private static void updateReplication( ServerDescriptor desc, InitialLdapContext ctx, TopologyCacheFilter cacheFilter) throws NamingException { boolean replicationEnabled = false; SearchControls ctls = new SearchControls(); ctls.setSearchScope(SearchControls.OBJECT_SCOPE); ctls.setReturningAttributes(new String[] {"ds-cfg-enabled"}); String filter = "(objectclass=ds-cfg-synchronization-provider)"; LdapName jndiName = new LdapName("cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config"); NamingEnumeration<SearchResult> syncProviders = null; try { syncProviders = ctx.search(jndiName, filter, ctls); while (syncProviders.hasMore()) { SearchResult sr = syncProviders.next(); if ("true".equalsIgnoreCase(getFirstValue(sr, "ds-cfg-enabled"))) { replicationEnabled = true; } } } catch (NameNotFoundException nse) { /* ignore */ } finally { if (syncProviders != null) { syncProviders.close(); } } desc.serverProperties.put( ServerProperty.IS_REPLICATION_ENABLED, replicationEnabled ? Boolean.TRUE : Boolean.FALSE); Set<String> allReplicationServers = new LinkedHashSet<String>(); if (cacheFilter.searchBaseDNInformation()) { ctls = new SearchControls(); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); ctls.setReturningAttributes( new String[] {"ds-cfg-base-dn", "ds-cfg-replication-server", "ds-cfg-server-id"}); filter = "(objectclass=ds-cfg-replication-domain)"; jndiName = new LdapName("cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config"); syncProviders = null; try { syncProviders = ctx.search(jndiName, filter, ctls); while (syncProviders.hasMore()) { SearchResult sr = syncProviders.next(); int id = Integer.parseInt(getFirstValue(sr, "ds-cfg-server-id")); Set<String> replicationServers = getValues(sr, "ds-cfg-replication-server"); Set<String> dns = getValues(sr, "ds-cfg-base-dn"); for (String dn : dns) { for (ReplicaDescriptor replica : desc.getReplicas()) { if (areDnsEqual(replica.getSuffix().getDN(), dn)) { replica.setReplicationId(id); // Keep the values of the replication servers in lower case // to make use of Sets as String simpler. LinkedHashSet<String> repServers = new LinkedHashSet<String>(); for (String s : replicationServers) { repServers.add(s.toLowerCase()); } replica.setReplicationServers(repServers); allReplicationServers.addAll(repServers); } } } } } catch (NameNotFoundException nse) { /* ignore */ } finally { if (syncProviders != null) { syncProviders.close(); } } } ctls = new SearchControls(); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); ctls.setReturningAttributes( new String[] { "ds-cfg-replication-port", "ds-cfg-replication-server", "ds-cfg-replication-server-id" }); filter = "(objectclass=ds-cfg-replication-server)"; jndiName = new LdapName("cn=Multimaster " + "Synchronization,cn=Synchronization Providers,cn=config"); desc.serverProperties.put(ServerProperty.IS_REPLICATION_SERVER, Boolean.FALSE); NamingEnumeration<SearchResult> entries = null; try { entries = ctx.search(jndiName, filter, ctls); while (entries.hasMore()) { SearchResult sr = entries.next(); desc.serverProperties.put(ServerProperty.IS_REPLICATION_SERVER, Boolean.TRUE); String v = getFirstValue(sr, "ds-cfg-replication-port"); desc.serverProperties.put(ServerProperty.REPLICATION_SERVER_PORT, Integer.parseInt(v)); v = getFirstValue(sr, "ds-cfg-replication-server-id"); desc.serverProperties.put(ServerProperty.REPLICATION_SERVER_ID, Integer.parseInt(v)); Set<String> values = getValues(sr, "ds-cfg-replication-server"); // Keep the values of the replication servers in lower case // to make use of Sets as String simpler. LinkedHashSet<String> repServers = new LinkedHashSet<String>(); for (String s : values) { repServers.add(s.toLowerCase()); } allReplicationServers.addAll(repServers); desc.serverProperties.put( ServerProperty.EXTERNAL_REPLICATION_SERVERS, allReplicationServers); } } catch (NameNotFoundException nse) { /* ignore */ } finally { if (entries != null) { entries.close(); } } boolean replicationSecure = false; if (replicationEnabled) { ctls = new SearchControls(); ctls.setSearchScope(SearchControls.OBJECT_SCOPE); ctls.setReturningAttributes(new String[] {"ds-cfg-ssl-encryption"}); filter = "(objectclass=ds-cfg-crypto-manager)"; jndiName = new LdapName("cn=Crypto Manager,cn=config"); entries = ctx.search(jndiName, filter, ctls); try { while (entries.hasMore()) { SearchResult sr = entries.next(); String v = getFirstValue(sr, "ds-cfg-ssl-encryption"); replicationSecure = "true".equalsIgnoreCase(v); } } finally { entries.close(); } } desc.serverProperties.put( ServerProperty.IS_REPLICATION_SECURE, replicationSecure ? Boolean.TRUE : Boolean.FALSE); }
private static void updateReplicas( ServerDescriptor desc, InitialLdapContext ctx, TopologyCacheFilter cacheFilter) throws NamingException { if (!cacheFilter.searchBaseDNInformation()) { return; } SearchControls ctls = new SearchControls(); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); ctls.setReturningAttributes(new String[] {"ds-cfg-base-dn", "ds-cfg-backend-id"}); String filter = "(objectclass=ds-cfg-backend)"; LdapName jndiName = new LdapName("cn=config"); NamingEnumeration<SearchResult> databases = ctx.search(jndiName, filter, ctls); try { while (databases.hasMore()) { SearchResult sr = databases.next(); String id = getFirstValue(sr, "ds-cfg-backend-id"); if (!isConfigBackend(id) || isSchemaBackend(id)) { Set<String> baseDns = getValues(sr, "ds-cfg-base-dn"); Set<String> entries; if (cacheFilter.searchMonitoringInformation()) { entries = getBaseDNEntryCount(ctx, id); } else { entries = new HashSet<String>(); } Set<ReplicaDescriptor> replicas = desc.getReplicas(); for (String baseDn : baseDns) { boolean addReplica = cacheFilter.searchAllBaseDNs(); if (!addReplica) { for (String dn : cacheFilter.getBaseDNsToSearch()) { addReplica = Utils.areDnsEqual(dn, baseDn); if (addReplica) { break; } } } if (addReplica) { SuffixDescriptor suffix = new SuffixDescriptor(); suffix.setDN(baseDn); ReplicaDescriptor replica = new ReplicaDescriptor(); replica.setServer(desc); replica.setBackendName(id); replicas.add(replica); HashSet<ReplicaDescriptor> r = new HashSet<ReplicaDescriptor>(); r.add(replica); suffix.setReplicas(r); replica.setSuffix(suffix); int nEntries = -1; for (String s : entries) { int index = s.indexOf(" "); if (index != -1) { String dn = s.substring(index + 1); if (Utils.areDnsEqual(baseDn, dn)) { try { nEntries = Integer.parseInt(s.substring(0, index)); } catch (Throwable t) { /* Ignore */ } break; } } } replica.setEntries(nEntries); } } desc.setReplicas(replicas); } } } finally { databases.close(); } }
/** * Creates a ServerDescriptor object based on some ADS properties provided. * * @param adsProperties the ADS properties of the server. * @return a ServerDescriptor object that corresponds to the provided ADS properties. */ public static ServerDescriptor createStandalone( Map<ADSContext.ServerProperty, Object> adsProperties) { ServerDescriptor desc = new ServerDescriptor(); desc.setAdsProperties(adsProperties); return desc; }
/** * Tells whether the provided server descriptor represents the same server as this object. * * @param server the server to make the comparison. * @return whether the provided server descriptor represents the same server as this object or * not. */ public boolean isSameServer(ServerDescriptor server) { return getId().equals(server.getId()); }
/** {@inheritDoc} */ public void beginDisplay(UserData data) { TreeSet<ServerDescriptor> array = orderServers(data.getRemoteWithNoReplicationPort().keySet()); AuthenticationData authData = data.getReplicationOptions().getAuthenticationData(); String newServerDisplay; if (authData != null) { newServerDisplay = authData.getHostName() + ":" + authData.getPort(); } else { newServerDisplay = ""; } if (!array.equals(orderedServers) || !newServerDisplay.equals(serverToConnectDisplay)) { serverToConnectDisplay = newServerDisplay; // Adds the required focus listeners to the fields. final FocusListener l = new FocusListener() { public void focusGained(FocusEvent e) { lastFocusComponent = e.getComponent(); } public void focusLost(FocusEvent e) {} }; lastFocusComponent = null; HashMap<String, String> hmOldValues = new HashMap<>(); for (String id : hmFields.keySet()) { hmOldValues.put(id, hmFields.get(id).getText()); } HashMap<String, Boolean> hmOldSecureValues = new HashMap<>(); for (String id : hmCbs.keySet()) { hmOldSecureValues.put(id, hmCbs.get(id).isSelected()); } orderedServers.clear(); orderedServers.addAll(array); hmFields.clear(); hmCbs.clear(); hmLabels.clear(); for (ServerDescriptor server : orderedServers) { String serverDisplay; if (server.getHostPort(false).equalsIgnoreCase(serverToConnectDisplay)) { serverDisplay = serverToConnectDisplay; } else { serverDisplay = server.getHostPort(true); } LabelFieldDescriptor desc = new LabelFieldDescriptor( LocalizableMessage.raw(serverDisplay), INFO_REPLICATION_PORT_TOOLTIP.get(), LabelFieldDescriptor.FieldType.TEXTFIELD, LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PORT_FIELD_SIZE); AuthenticationData auth = data.getRemoteWithNoReplicationPort().get(server); JTextComponent field = UIFactory.makeJTextComponent(desc, String.valueOf(auth.getPort())); String oldValue = hmOldValues.get(server.getId()); if (oldValue != null) { field.setText(oldValue); } JLabel label = UIFactory.makeJLabel(desc); hmFields.put(server.getId(), field); label.setLabelFor(field); field.addFocusListener(l); if (lastFocusComponent == null) { lastFocusComponent = field; } hmLabels.put(server.getId(), label); JCheckBox cb = UIFactory.makeJCheckBox( INFO_SECURE_REPLICATION_LABEL.get(), INFO_SECURE_REPLICATION_TOOLTIP.get(), UIFactory.TextStyle.SECONDARY_FIELD_VALID); cb.setSelected(auth.useSecureConnection()); Boolean oldSecureValue = hmOldSecureValues.get(server.getId()); if (oldSecureValue != null) { cb.setSelected(oldSecureValue); } hmCbs.put(server.getId(), cb); } populateFieldsPanel(); } }
/** {@inheritDoc} */ public int compare(ServerDescriptor desc1, ServerDescriptor desc2) { return desc1.getHostPort(true).compareTo(desc2.getHostPort(true)); }