opends/src/guitools/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
@@ -66,7 +66,6 @@ * */ public class CustomSearchResult implements Comparable<CustomSearchResult> { private Name name; private String dn; private Map<String, List<Object>> attributes; private SortedSet<String> attrNames; @@ -99,6 +98,7 @@ throws NamingException { String sName = sr.getName(); Name name; if ((baseDN != null) && (baseDN.length() > 0)) { if ((sName != null) && (sName.length() > 0)) @@ -137,8 +137,8 @@ NamingEnumeration<?> en = attrs.getAll(); while (en.hasMore()) { Attribute attr = (Attribute)en.next(); String name = attr.getID(); attrNames.add(name); String attrName = attr.getID(); attrNames.add(attrName); List<Object> values = new ArrayList<Object>(); for (int i=0; i<attr.size(); i++) { @@ -148,7 +148,7 @@ values.add(v); } } attributes.put(name.toLowerCase(), values); attributes.put(attrName.toLowerCase(), values); } } toString = calculateToString(); @@ -206,6 +206,19 @@ /** * {@inheritDoc} */ public CustomSearchResult clone() { CustomSearchResult sr = new CustomSearchResult(dn); sr.attributes = new HashMap<String, List<Object>>(attributes); sr.attrNames = new TreeSet<String>(attrNames); sr.toString = toString; sr.hashCode = hashCode; return sr; } /** * {@inheritDoc} */ public boolean equals(Object o) { boolean equals = false; opends/src/guitools/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
@@ -152,6 +152,10 @@ public void update(CustomSearchResult sr, boolean isReadOnly, TreePath path) { boolean sameEntry = false; if (sr != null) { sr = filterSearchResult(sr); } if ((searchResult != null) && (sr != null)) { sameEntry = searchResult.getDN().equals(sr.getDN()); opends/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -433,6 +433,10 @@ public void update(CustomSearchResult sr, boolean isReadOnly, TreePath path) { boolean sameEntry = false; if (sr != null) { sr = filterSearchResult(sr); } if ((searchResult != null) && (sr != null)) { sameEntry = searchResult.getDN().equals(sr.getDN()); opends/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
@@ -174,6 +174,10 @@ public void update(CustomSearchResult sr, boolean isReadOnly, TreePath path) { boolean sameEntry = false; if (sr != null) { sr = filterSearchResult(sr); } if ((searchResult != null) && (sr != null)) { sameEntry = searchResult.getDN().equals(sr.getDN()); @@ -189,7 +193,7 @@ this.treePath = path; updateTitle(sr, path); ignoreEntryChangeEvents = true; tableModel.displayEntry(searchResult); tableModel.displayEntry(); Utilities.updateTableSizes(table); Utilities.updateScrollMode(scroll, table); SwingUtilities.invokeLater(new Runnable() @@ -458,10 +462,10 @@ private boolean sortAscending = true; /** * Sets the entry to be displayed by this table model. * @param searchResult the entry to be displayed. * Updates the contents of the table model with the * {@code TableViewEntryPanel.searchResult} object. */ public void displayEntry(CustomSearchResult searchResult) public void displayEntry() { updateDataArray(); fireTableDataChanged(); opends/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
@@ -53,6 +53,7 @@ import org.opends.guitools.controlpanel.util.Utilities; import org.opends.messages.Message; import org.opends.server.api.AttributeSyntax; import org.opends.server.replication.plugin.Historical; import org.opends.server.schema.SchemaConstants; import org.opends.server.types.AttributeType; import org.opends.server.types.AttributeValue; @@ -517,10 +518,10 @@ */ protected boolean isPassword(String attrName) { boolean isBinary = false; boolean isPassword = false; Schema schema = getInfo().getServerDescriptor().getSchema(); isBinary = Utilities.hasPasswordSyntax(attrName, schema); return isBinary; isPassword = Utilities.hasPasswordSyntax(attrName, schema); return isPassword; } /** @@ -632,4 +633,84 @@ } return isEditable; } /** * This method is called because the ds-sync-hist attribute has a * DirectoryString syntax, but it contains byte[] on it (if there has been * a modification in a binary value). * @param sr the search result to use. * @return the filtered search result to be used to be displayed. */ protected CustomSearchResult filterSearchResult(CustomSearchResult sr) { CustomSearchResult filteredSr; List<Object> values = sr.getAttributeValues(Historical.HISTORICALATTRIBUTENAME); if (values != null) { List<Object> newValues = new ArrayList<Object>(); for (Object v : values) { newValues.add(filterStringValue(String.valueOf(v))); } if (newValues.equals(values)) { filteredSr = sr; } else { filteredSr = sr.clone(); filteredSr.set(Historical.HISTORICALATTRIBUTENAME, newValues); } } else { filteredSr = sr; } return filteredSr; } /** * This method is called because the ds-sync-hist attribute has a * DirectoryString syntax, but it contains byte[] on it (if there has been * a modification in a binary value). * @param value the value to be filtered. * @return the value that will actually be displayed. */ private String filterStringValue(String value) { String filteredValue; // Parse the value to find out if this corresponds to a change in a // binary attribute. int index = value.indexOf(":"); if (index != -1) { String modifiedAttr = value.substring(0, index).trim(); modifiedAttr = Utilities.getAttributeNameWithoutOptions(modifiedAttr); if (isBinary(modifiedAttr)) { String replTag = "repl:"; int index2 = value.indexOf(replTag, index); if (index2 != -1) { filteredValue = value.substring(0, index2+replTag.length()) + INFO_CTRL_PANEL_DS_SYNC_HIST_BINARY_VALUE.get(); } else { filteredValue = value.substring(0, index+1) + INFO_CTRL_PANEL_DS_SYNC_HIST_BINARY_VALUE.get(); } } else { filteredValue = value; } } else { filteredValue = value; } return filteredValue; } } opends/src/messages/messages/admin_tool.properties
@@ -2969,4 +2969,4 @@ INFO_CTRL_PANEL_DUPLICATE_ENTRY_DN=Entry DN: INFO_CTRL_PANEL_ENTRY_TO_DUPLICATE_HAS_PASSWORD_WARNING=The duplicated entry \ will contain a password with value '%s' INFO_CTRL_PANEL_DS_SYNC_HIST_BINARY_VALUE=<Binary Value>