📄 newentrywin.java
字号:
{
posDataModel.addElement(allObjectClasses.get(i));
}
}
catch (NamingException e)
{
//TODO add a manual way for the user to manually add object classes
}
Enumeration existing = selDataModel.elements();
while (existing.hasMoreElements())
{
posDataModel.removeElement(existing.nextElement());
}
display.makeHeavy();
display.add(possiblePanel,0,4,2,2);
display.add(selectedPanel,2,4,2,2);
display.makeLight();
display.newLine();
select = new CBButton(CBIntText.get("Add"), CBIntText.get("Click to add the selection."));
remove = new CBButton(CBIntText.get("Remove"), CBIntText.get("Click to remove the selection."));
display.addWide(select, 2);
display.addWide(remove, 2);
display.newLine();
validate();
select.addActionListener(this);
remove.addActionListener(this);
}
/**
* Callback from directory request to find possible object classes.
*/
public void dataReady(DataQuery result)
{
try
{
/*
if (result.getType() == DataQuery.GETALLOC)
{
Vector allObjectClasses = result.getObjectClasses();
//XXX every performance mistake in the book is committed here.
for (int i=0; i<allObjectClasses.size(); i++)
{
posDataModel.addElement(allObjectClasses.get(i));
}
Enumeration existing = selDataModel.elements();
while (existing.hasMoreElements())
{
posDataModel.removeElement(existing.nextElement());
}
//possibleList.setListData(allObjectClasses);
}
*/
if (result.getType() == DataQuery.GETRECOC)
{
if (suggestedClasses.size() < 1) // only add suggestions if none have already been added!
{
ArrayList recommendedObjectClasses = result.getObjectClasses();
for (int i=0; i<recommendedObjectClasses.size(); i++)
suggestedClasses.addElement(recommendedObjectClasses.get(i));
}
checkSuggestedList();
}
}
catch (NamingException e) {CBUtility.error(CBIntText.get("threaded broker error: "), e); } // XXXTHREAD
}
/**
*
*/
protected void checkSuggestedList()
{
if (suggest == true && suggestedClasses.size() > 0)
{
for (int i=0; i<suggestedClasses.size(); i++)
{
selectClass((String)suggestedClasses.get(i));
}
}
}
public void registerMouseListeners()
{
// 'add' list mouse listener
possibleList.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getClickCount() == 2)
{
selectClass((String)possibleList.getSelectedValue());
}
else
super.mouseClicked(e);
}
});
selectedList.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getClickCount() == 2)
{
removeClass((String)selectedList.getSelectedValue());
}
else
super.mouseClicked(e);
}
});
}
public void selectClass(String value)
{
if (selDataModel.contains(value)==false)
{
selDataModel.addElement(value);
posDataModel.removeElement(value);
}
}
public void removeClass(String value)
{
if (selDataModel.contains(value))
{
selDataModel.removeElement(value);
if (posDataModel.contains(value) == false)
{
// add element to the correct alphabetial position...
Object[] possibleValues = posDataModel.toArray();
int len = possibleValues.length;
for (int i=0; i<len; i++)
{
if (value.compareTo(possibleValues[i].toString()) <= 0)
{
posDataModel.add(i, value);
break;
}
}
}
}
}
/**
* <p>This creates the new entry</p>
*
* <p>This method is extended from the base class, and is called
* whenever the OK button is pressed.</p>
*/
public void doOK()
{
// XXX maybe improve so user doesn't need to spec rdn at this stage.
String rdnText = null;
if (simpleMode == false)
{
rdnText = rdnField.getText().trim();
int equalpos = rdnText.indexOf('=');
rdnText = rdnText.substring(0, equalpos+1) + NameUtility.escape(rdnText.substring(equalpos+1)); // fix for bug 5515
try // do sanity check
{
// if (RDN==null || "".equals(RDN)) return;
if (rdnText==null || "".equals(rdnText)) //TE: empty RDN.
throw new InvalidNameException(CBIntText.get("Empty RDN, please enter a valid RDN. ") + ((rdnText==null)?"<null>":CBIntText.get("The RDN value entered was: '")+rdnText) + "'");
if (NameUtility.next(rdnText,0,'=')<0) //TE: no '='.
throw new InvalidNameException(CBIntText.get("Invalid RDN, please enter a naming attribute followed by '=' followed by a name in the RDN field (for example, 'cn=Trudi). '") + ((rdnText==null)?"<null>":CBIntText.get("The RDN value entered was: '")+rdnText) + "'");
else if (NameUtility.next(rdnText,0,'=')<1) //TE: no naming attribute.
throw new InvalidNameException(CBIntText.get("Invalid RDN, please enter a naming attribute in the RDN field (for example, cn: 'cn=Trudi). '") + ((rdnText==null)?"<null>":CBIntText.get("The RDN value entered was: '")+rdnText) + "'");
}
catch (InvalidNameException ine)
{
CBUtility.warning(this, CBIntText.get("Please Fill in the RDN field with a valid RDN."), CBIntText.get("Invalid RDN"));
log.log(Level.WARNING, "Invalid RDN value in the New Entry dialog: ", ine);
return;
}
String dn;
if (parentDNField.getText().trim().length() > 0)
dn = rdnText + "," + parentDNField.getText();
else
dn = rdnText;
//DN newObjectDN = new DN(dn);
entryDN = new DN(dn);
}
Enumeration atts = selDataModel.elements();
if (atts == null) // error: force user to use cancel to exit
{CBUtility.warning(this, CBIntText.get("At least one object class must be selected!"),CBIntText.get("Need ObjectClass(s)"));return;}
BasicAttribute obclasses = new BasicAttribute((objectClassName==null)?"objectClass":objectClassName);
while (atts.hasMoreElements())
{
String oc = atts.nextElement().toString();
obclasses.add(oc);
}
if (obclasses.size()==0)
{CBUtility.warning(this, CBIntText.get("At least one object class must be selected."), CBIntText.get(" Need ObjectClass(s)")); return;}// error: force user to use cancel to exit
if (virtualEntry)
{
//TE: if it is a virtual entry we don't want to add a new entry it at this stage. We just want
// to get the object class(es) that the user has selected.
newObjectClasses = obclasses;
doCancel();
}
if (createNewEntry(obclasses, rdnText, entryDN) == true)
doCancel();
// otherwise something went wrong, so keep dialog window around...
}
/**
* When Cancel is pressed (or the window is finished)
* this method shuts the window down, and prompts the
* parent to repaint (avoiding those nasty paint artifacts).
*/
public void doCancel()
{
setVisible(false);
dispose();
this.getParent().repaint();
}
public void actionPerformed(ActionEvent e)
{
Object src = e.getSource();
if (src == select)
{
if (possibleList.getSelectedValue() != null)
selectClass(possibleList.getSelectedValue().toString());
}
else if (src == remove)
{
if (selectedList.getSelectedValue() != null)
removeClass(selectedList.getSelectedValue().toString());
}
else if (src == autoSuggest)
{
suggest = autoSuggest.isSelected();
if (suggest == true)
checkSuggestedList();
else
{
if (suggestedClasses.size() > 0)
{
for (int i=0; i<suggestedClasses.size(); i++)
removeClass((String)suggestedClasses.get(i));
}
}
}
}
/**
* create a new Entry, by constructing a DXAttributes object
* using the list of objectclasses, and the rdn text, and
* passing it to a TreeEntryCreator
*/
public boolean createNewEntry(Attribute obclasses, String rdnText, DN newObjectDN)
{
// create a schema aware DXAttributes object, use it to get the list of all
// parent object classes as an attribute, and add it to the DXAttributes
DXAttributes attlist = new DXAttributes(obclasses);
Attribute allObjectClasses = attlist.getAllObjectClasses();
if (allObjectClasses == null) return false; // should never happen
//DXNamingEnumeration bloop = new DXNamingEnumeration(allObjectClasses.getAll());
attlist.put(allObjectClasses);
attlist.expandAllAttributes();
// copy appropriate default values (if any)
if (defaultAttributes !=null)
{
DXNamingEnumeration defAtts = (DXNamingEnumeration)defaultAttributes.getAllNonNull();
while (defAtts.hasMore())
{
Attribute defAtt = (Attribute)defAtts.next();
String defAttName = defAtt.getID();
if (defAttName.equalsIgnoreCase("objectclass")==false)
{
if (attlist.get(defAttName)!=null) // only use defaults for valid attribute
attlist.put(defAtt);
}
}
}
if (rdnText != null)
{
RDN rdn = new RDN(rdnText);
if (rdn.size()==0 || "".equals(rdn.getRawVal(0)))
{
CBUtility.warning(this, CBIntText.get("Please fill in a valid name for the entry"), CBIntText.get("Can't read RDN"));
return false;
}
String rdnAttribute = rdn.getAtt(0);
String rdnValue = rdn.getRawVal(0);
if (rdn.isMultiValued()==false)
{
BasicAttribute rdnAtt = new BasicAttribute(rdnAttribute, rdnValue);
attlist.put(rdnAtt);
}
else // multi valued rdn...
{
for (int i=0; i<rdn.size(); i++)
{
BasicAttribute rdnAtt = new BasicAttribute(rdn.getAtt(i), rdn.getRawVal(i));
attlist.put(rdnAtt);
}
}
if (rdn.validate() == false)
{
CBUtility.warning(this, CBIntText.get("Couldn't parse entry's name - please try again"), CBIntText.get("Can't read RDN"));
return false;
}
}
setVisible(false);
this.getParent().repaint();
if (dataSource == null) // rare error (should be never)
{
CBUtility.error(CBIntText.get("unusual error:") + "\nno Data Source registered in NewEntryWin.", null);
return false;
}
// CBUtility.setWaitCursor(this);
log.fine("creating entry " + newObjectDN);
DXEntry newEntry = new DXEntry(attlist, newObjectDN);
newEntry.setStatus(DXEntry.NEW);
entryEditor.displayEntry(newEntry, dataSource);
// dataSource.modifyEntry(null, newEntry);
// CBUtility.setNormalCursor(this);
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -