[Dirconsole-cvs] dirconsole/Snapins/CoreSchema/src/dirconsole/snapin/core/task DeleteObjectTask.java
Brought to you by:
bavodr
|
From: Bavo De R. <ba...@us...> - 2004-07-25 19:56:45
|
Update of /cvsroot/dirconsole/dirconsole/Snapins/CoreSchema/src/dirconsole/snapin/core/task In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7922/Snapins/CoreSchema/src/dirconsole/snapin/core/task Added Files: DeleteObjectTask.java Log Message: Initial revision --- NEW FILE: DeleteObjectTask.java --- /* * Copyright 2001 - 2004, Bavo De Ridder * * This file is part of Directory Console. * * Directory Console is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) any * later version. * * Directory Console is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * Directory Console; if not, write to the Free Software Foundation, Inc., 59 * Temple Place, Suite 330, Boston * * http://www.gnu.org/licenses/gpl.html */ package dirconsole.snapin.core.task; import java.util.Vector; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import org.apache.log4j.Logger; import portal.comp.Button; import portal.core.api.Action; import portal.core.api.Component; import portal.core.api.Panel; import portal.core.render.VelocityLayout; import dirconsole.api.LdapException; import dirconsole.api.LdapFactory; import dirconsole.selector.ObjectInput; import dirconsole.task.api.Task; import dirconsole.task.api.TaskContext; public class DeleteObjectTask implements Task { private static Logger logger = Logger.getLogger(DeleteObjectTask.class); public String getName() { return "Delete Object"; } public void init(TaskContext taskContext) { this.taskContext = taskContext; createUI(); } public Component getComponent() { return panel; } public void destroy() { } private void createUI() { panel = new Panel(); panel.setLayout(new VelocityLayout( "snapin/coreschema/task/DeleteObjectTask.vm")); objectInput = new ObjectInput(); panel.add(objectInput, "ObjectInput"); deleteButton = new Button(); deleteButton.getButtonModel().setCaption("Delete"); deleteButton.getButtonModel().setButtonAction(new Action() { public void doAction() { deleteObject(objectInput.getObjectInputModel().getDn().getString(), false); taskContext.close(); } }); panel.add(deleteButton, "DeleteButton"); cancelButton = new Button(); cancelButton.getButtonModel().setCaption("Cancel"); cancelButton.getButtonModel().setButtonAction(new Action() { public void doAction() { taskContext.close(); } }); panel.add(cancelButton, "CancelButton"); } private void deleteObject(String dn, boolean children) { DirContext rootContext = null; try { rootContext = getRootContext(); if (children) { deleteTree(rootContext, dn, true); } else { deleteSingleObject(rootContext, dn); } } catch (LdapException ldapException) { logger.error("Could not delete object", ldapException); } finally { closeContext(rootContext); } } private boolean deleteTree(DirContext ctx, String dn, boolean deleteItSelf) { Vector entries = new Vector(); String adn; boolean rs; try { NamingEnumeration results = search(ctx, dn, "(objectclass=*)", new String[] { "objectclass" }, SearchControls.SUBTREE_SCOPE); while (results != null && results.hasMoreElements()) { SearchResult si = (SearchResult) results.next(); String n = si.getName().trim(); if (n == null || (n != null && n.length() == 0)) adn = dn; else adn = n + ", " + dn; entries.addElement(adn); } if (!deleteItSelf && entries.size() > 0) entries.removeElementAt(0); for (int i = entries.size() - 1; i >= 0; i--) { adn = (String) entries.elementAt(i); ctx.destroySubcontext(adn); } } catch (NamingException e) { logger.error("Failed to delete tree", e); return false; } return true; } private boolean deleteSingleObject(DirContext ctx, String dn) { try { ctx.destroySubcontext(dn); } catch (Exception e) { logger.error("Failed to delete entry " + dn, e); return false; } return true; } private NamingEnumeration search(DirContext ctx, String dn, String filter, String[] attribs, int type) throws NamingException { SearchControls constraints = new SearchControls(); constraints.setSearchScope(type); constraints.setReturningAttributes(attribs); return ctx.search(dn, filter, constraints); } private DirContext getRootContext() throws LdapException { return LdapFactory.getRootContext(); } private void closeContext(DirContext ctx) { try { if (ctx != null) { ctx.close(); } } catch (Exception e) { // swallow } } private TaskContext taskContext; private Panel panel; private ObjectInput objectInput; private Button deleteButton; private Button cancelButton; } |