libreccm-legacy/ccm-ldn-terms/src/com/arsdigita/london/terms/ui/admin/DomainDetails.java

161 lines
5.8 KiB
Java
Executable File

/*
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.arsdigita.london.terms.ui.admin;
import com.arsdigita.bebop.PageState;
import com.arsdigita.categorization.Category;
import com.arsdigita.domain.DeleteException;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.london.terms.Domain;
import com.arsdigita.london.terms.Terms;
import com.arsdigita.london.terms.indexing.Indexer;
import com.arsdigita.london.util.ui.AbstractDomainObjectDetails;
import com.arsdigita.london.util.ui.ErrorMessage;
import com.arsdigita.london.util.ui.event.DomainObjectActionAbortedException;
import com.arsdigita.london.util.ui.event.DomainObjectActionEvent;
import com.arsdigita.london.util.ui.event.DomainObjectActionListener;
import com.arsdigita.london.util.ui.parameters.DomainObjectParameter;
import com.arsdigita.xml.Element;
import java.util.Set;
import org.apache.log4j.Logger;
/**
*
*
*/
public class DomainDetails extends AbstractDomainObjectDetails {
private static final Logger s_log =
Logger.getLogger( DomainDetails.class );
private DomainObjectParameter m_domain;
private ErrorMessage m_errorMessage = new ErrorMessage();
public static final String ACTION_EDIT = "edit";
public static final String ACTION_DELETE = "delete";
public static final String ACTION_TRAIN = "train";
public static final String ACTION_UNTRAIN = "untrain";
public DomainDetails(DomainObjectParameter domain) {
super("domainDetails",
Terms.XML_PREFIX,
Terms.XML_NS);
setRedirecting(true);
m_domain = domain;
registerDomainObjectAction(ACTION_EDIT);
registerDomainObjectAction(ACTION_DELETE);
registerDomainObjectAction(ACTION_TRAIN);
registerDomainObjectAction(ACTION_UNTRAIN);
addDomainObjectActionListener(
ACTION_DELETE,
new DomainObjectActionListener() {
@Override
public void actionPerformed(DomainObjectActionEvent e) {
PageState ps = e.getPageState();
DomainObject dobj = e.getObject();
if( s_log.isDebugEnabled() ) {
s_log.debug( "Deleting " + dobj.getOID() );
}
try {
dobj.delete();
} catch( DeleteException ex ) {
Set properties = ex.getDependencyProperties();
if( properties.contains( Category.OWNER_USE_CONTEXT ) ) {
m_errorMessage.addMessage( ps, "Unable to delete this domain because it still contains one or more mappings below. You can manually remove these by clicking on the 'remove' links under 'Domain Usage'." );
properties.remove( Category.OWNER_USE_CONTEXT );
s_log.debug( "Use context mapping would cause failure" );
}
// A catchall. If a specific message isn't caught above,
// dump the raw error message. It's reasonably useful.
if( !properties.isEmpty() ) {
m_errorMessage.addMessage( ps, ex.getMessage() );
s_log.debug( "Other error would cause failure" );
}
throw new DomainObjectActionAbortedException
( "Error deleting object" + dobj.getOID() );
}
ps.setValue(m_domain, null);
s_log.debug( "Delete succeeded" );
}
});
addDomainObjectActionListener(ACTION_TRAIN, new DomainObjectActionListener() {
@Override
public void actionPerformed(DomainObjectActionEvent e) {
Domain domain = (Domain) e.getObject();
Indexer indexer = Indexer.retrieve(domain);
if (indexer == null) {
indexer = Indexer.create(domain);
}
indexer.train();
}
});
addDomainObjectActionListener(ACTION_UNTRAIN, new DomainObjectActionListener() {
@Override
public void actionPerformed(DomainObjectActionEvent e) {
Domain domain = (Domain) e.getObject();
Indexer indexer = Indexer.retrieve(domain);
if (indexer != null) {
indexer.delete();
}
}
});
}
/**
*
* @param state
* @return
*/
@Override
protected DomainObject getDomainObject(PageState state) {
return (DomainObject)state.getValue(m_domain);
}
/**
*
* @param ps
* @param parent
* @param dobj
*/
@Override
public void generateActionXML( PageState ps, Element parent,
DomainObject dobj ) {
s_log.debug( "In generateActionXML" );
m_errorMessage.generateXML( ps, parent );
super.generateActionXML( ps, parent, dobj );
}
}