Bug 117852

Summary: Cannot delete a navigation category
Product: [Retired] Red Hat Enterprise CMS Reporter: Cress Rolfe <cress.rolfe>
Component: APLAWSAssignee: ccm-bugs-list
Status: CLOSED WONTFIX QA Contact: Daniel Berrangé <berrange>
Severity: high Docs Contact:
Priority: medium    
Version: nightlyCC: arturo.dell
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2010-09-03 14:31:18 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Cress Rolfe 2004-03-09 10:34:10 UTC
Description of problem:
In Categories section, I am trying to delete the sub-category 
called "Your local councillor": 
http://youth.aplaws.org.uk/ccm/navigation/category.jsp?
categoryID=19042

[Council and democracy > Who represents you > Camden's councillors > 
Your local councillor]


Version-Release number of selected component (if applicable):


How reproducible: always on this particular category


Steps to Reproduce:
1. Go to categories
2. [Make sure no items are assigned that category ]
3. Delete category
  
Actual results:
Gives error - 
CCM issue report code: 194.202.210.41:6d8dac36:fb2f216696

Expected results: Should delete nav category so no longer visible on 
front end.

Additional info:
Arturo suggested this may be because there is an item assigned to 
this navigation category.  I have deleted the back end folder for 
this category (our back end mirrors our front end) after deleting all 
items within it.  There may be an item elsewhere in a back end test 
folder to which someone has assigned this category and then not 
published it, but I am not aware of a way of tracking any such item 
down. Please advise.

I have also tried to delete the following empty categories, without 
success:
http://youth.aplaws.org.uk/ccm/navigation/category.jsp?
categoryID=19150
(Transport and Streets > Community transport initiatives > School 
travel plan)

http://youth.aplaws.org.uk/ccm/navigation/category.jsp?
categoryID=19152
(Workplace travel plan, same parent)

thanks

Comment 1 Arturo Dell 2004-03-11 11:58:31 UTC
This is a HIGH priority issue. I created a new category and then
deleted it so it is not a bug, agreed. It is more a bug by obscurity,
as a user we have no way of knowing which item is associated to this
category. Can't figure it out from the error message:

CCM issue report code: 194.202.210.41:476c76ff:fb39ccaced


-*-*-*-*-*- Begin Error Report -*-*-*-*-*-
-*-*-*- ACS Error Report Code: 194.202.210.41:476c76ff:fb39ccaced -*-*-*-
-*-*-*- Message 1: com.caucho.jsp.JspLineException: null (root cause:
ORA-02292: integrity constraint
(APLAWS_PLUS.TRM_TER_MOD_CATEGOR_ID_F_J1OJJ) violated - child record found
) -*-*-*-
-*-*-*- Message 2: com.arsdigita.persistence.PersistenceException:
null (root cause: ORA-02292: integrity constraint
(APLAWS_PLUS.TRM_TER_MOD_CATEGOR_ID_F_J1OJJ) violated - child record found
) -*-*-*-
-*-*-*- Message 3: com.redhat.persistence.engine.rdbms.RDBMSEngine$4:
ORA-02292: integrity constraint
(APLAWS_PLUS.TRM_TER_MOD_CATEGOR_ID_F_J1OJJ) violated - child record found
 -*-*-*-

-*-*-*- Section: HTTP headers -*-*-*-
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel,
application/msword, application/x-shockwave-flash, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb
Cache-Control: no-cache, max-age=259200
Connection: keep-alive
Content-Length: 421
Content-Type: application/x-www-form-urlencoded
Cookie: ad_user_login=9320!1170936721934!hmMaoufbxXxWyem4bi2Dfw==;
JSESSIONID=axgGmz94X3s7
Host: youth.aplaws.org.uk
REDIRECT_STATUS: 200
REDIRECT_URL: /ccm/content/admin/index.jsp
Referer:
http://youth.aplaws.org.uk/ccm/content/admin/index.jsp?bbp.1120.d=asc&bbp.69.ps=20&bbp.781.ch=19058&bbp.1242.sel=198&bbp.820.d=asc&bbp.944.sel=19058&bbp.938.sel_context=%3Cdefault%3E&bbp.19.sel=65&bbp.692.stack=701&bbp.944.state=+18910++19694++43932++18914++19020++19042++19058+&bbp.s=777&bbp.947.stack=955&bbp.i=d0.4.1.4.1.j7.1.1o.1.1.1&bbp.3.pane=5&bbp.19.state=+65+&bbp.808.d=asc&g11n.enc=UTF-8
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Via: 1.1 camden.aplaws.org.uk:80 (Squid/2.4.STABLE6)
X-Forwarded-For: 212.85.13.68

-*-*-*- Section: Cookies -*-*-*-
ad_user_login: 9320!1170936721934!hmMaoufbxXxWyem4bi2Dfw== (expires: -1)
JSESSIONID: axgGmz94X3s7 (expires: -1)

-*-*-*- Section: CCM User -*-*-*-
Party not logged in

-*-*-*- Section: Stack trace -*-*-*-
com.redhat.persistence.engine.rdbms.RDBMSEngine$4: ORA-02292:
integrity constraint (APLAWS_PLUS.TRM_TER_MOD_CATEGOR_ID_F_J1OJJ)
violated - child record found

	at
com.redhat.persistence.engine.rdbms.RDBMSEngine.execute(RDBMSEngine.java(Compiled
Code))
	at
com.redhat.persistence.engine.rdbms.RDBMSEngine.execute(RDBMSEngine.java(Inlined
Compiled Code))
	at
com.redhat.persistence.engine.rdbms.RDBMSEngine.flush(RDBMSEngine.java(Compiled
Code))
	at com.redhat.persistence.Session.flushInternal(Session.java(Compiled
Code))
	at com.redhat.persistence.Session.flush(Session.java(Compiled Code))
	at
com.arsdigita.persistence.DataObjectImpl.delete(DataObjectImpl.java:391)
	at com.arsdigita.domain.DomainObject.delete(DomainObject.java:324)
	at
com.arsdigita.categorization.Category.deleteCategoryAndOrphan(Category.java:755)
	at
com.arsdigita.cms.ui.category.CategoryAdminPane$DeleteForm.process(CategoryAdminPane.java:169)
	at com.arsdigita.bebop.FormSection.fireProcess(FormSection.java:490)
	at com.arsdigita.bebop.FormSection$4.process(FormSection.java:464)
	at
com.arsdigita.bebop.FormModel.fireFormProcess(FormModel.java(Compiled
Code))
	at com.arsdigita.bebop.FormModel.process(FormModel.java(Compiled Code))
	at com.arsdigita.bebop.Form.process(Form.java(Compiled Code))
	at com.arsdigita.bebop.Form.respond(Form.java:281)
	at com.arsdigita.bebop.PageState.respond(PageState.java(Compiled Code))
	at com.arsdigita.bebop.Page.process(Page.java(Compiled Code))
	at com.arsdigita.bebop.Page.process(Page.java(Compiled Code))
	at com.arsdigita.bebop.Page.buildDocument(Page.java:758)
	at com.arsdigita.cms.dispatcher.CMSPage$1.excurse(CMSPage.java:281)
	at
com.arsdigita.cms.CMSExcursion$1.excurse(CMSExcursion.java(Compiled Code))
	at
com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java(Compiled
Code))
	at com.arsdigita.cms.CMSExcursion.run(CMSExcursion.java(Compiled Code))
	at com.arsdigita.cms.dispatcher.CMSPage.dispatch(CMSPage.java:296)
	at
_packages._content_22dsection._www._admin._index__jsp._jspService(_index__jsp.java:54)
	at com.caucho.jsp.JavaPage.service(JavaPage.java(Compiled Code))
	at com.caucho.jsp.Page.subservice(Page.java(Compiled Code))
	at
com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java(Compiled
Code))
	at com.caucho.server.http.Invocation.service(Invocation.java(Compiled
Code))
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java(Compiled
Code))
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java(Compiled
Code))
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java(Compiled
Code))
	at
com.arsdigita.cms.ContentSectionServlet.doService(ContentSectionServlet.java:171)
	at
com.arsdigita.web.BaseApplicationServlet$1.excurse(BaseApplicationServlet.java(Compiled
Code))
	at
com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java(Compiled
Code))
	at
com.arsdigita.web.BaseApplicationServlet.doService(BaseApplicationServlet.java(Compiled
Code))
	at com.arsdigita.web.BaseServlet$1.excurse(BaseServlet.java(Compiled
Code))
	at
com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java(Compiled
Code))
	at
com.arsdigita.web.BaseServlet.internalService(BaseServlet.java(Compiled
Code))
	at com.arsdigita.web.BaseServlet.doPost(BaseServlet.java:291)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled
Code))
	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled
Code))
	at
com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java(Compiled
Code))
	at com.caucho.server.http.Invocation.service(Invocation.java(Compiled
Code))
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java(Compiled
Code))
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java(Compiled
Code))
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java(Compiled
Code))
	at
com.arsdigita.web.BaseDispatcher.forward(BaseDispatcher.java(Compiled
Code))
	at
com.arsdigita.web.BaseDispatcher.forward(BaseDispatcher.java(Compiled
Code))
	at
com.arsdigita.web.BaseDispatcher.dispatch(BaseDispatcher.java(Compiled
Code))
	at
com.arsdigita.web.DispatcherServlet.doService(DispatcherServlet.java(Compiled
Code))
	at com.arsdigita.web.BaseServlet$1.excurse(BaseServlet.java(Compiled
Code))
	at
com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java(Compiled
Code))
	at
com.arsdigita.web.BaseServlet.internalService(BaseServlet.java(Compiled
Code))
	at com.arsdigita.web.BaseServlet.doPost(BaseServlet.java:291)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled
Code))
	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled
Code))
	at
com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java(Compiled
Code))
	at
com.arsdigita.london.shortcuts.ShortcutFilter.doService(ShortcutFilter.java(Compiled
Code))
	at com.arsdigita.web.BaseFilter.doFilter(BaseFilter.java(Compiled Code))
	at
com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java(Compiled
Code))
	at
com.arsdigita.london.subsite.SubsiteFilter.doService(SubsiteFilter.java(Compiled
Code))
	at com.arsdigita.web.BaseFilter.doFilter(BaseFilter.java(Compiled Code))
	at
com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java(Compiled
Code))
	at com.caucho.server.http.Invocation.service(Invocation.java(Compiled
Code))
	at
com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java(Compiled
Code))
	at
com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java(Compiled
Code))
	at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
	at java.lang.Thread.run(Thread.java:513)




Comment 2 Daniel Berrangé 2004-03-11 12:10:38 UTC
The problem here is that these categories were initially by the
ESD-Toolkit controlled list importer. Thus, for every category, there
is an associated 'Term' object containing ESD-Toolkit metadata for
purposes of tracking/managing upgrades. The CMS, however, has no
knowledge of the ESD-Toolkit, so it attempts to delete the category
directly, rather then the Term, causes this constraint violation. To
fix this we're going to have to consider two options:

 * Disable all editing of categories from within the CMS & provide new
UI in the Terms application which ensures the ESD-Toolkit metadata
doesn't get screwed up.

 * Change the data model to allow categories to be deleted without
removing the associated Term, although we'll now be loosing
information making upgrades to new version of ESD Toolkit lists
considerably more difficult and unreliable, if not impossible in some
cases.

Option a) is definitely the preferred option long term, but involves
more work in the short term, so we'll have to think about this a
little more to see if there is a quicker 'half way house' which
resolves this bug without loosing the vital metadata.

Comment 3 Arturo Dell 2004-03-11 13:35:44 UTC
I think the navigation category list is different from the rest of the
ESD categories (LGCL - LGDL - LGSL) and has no connection with them. I
don't see why you would need to track/manage upgrades on the
navigation list if it is used exclusively for front end IA display. 
I think they are currently linked because we are using a trimmed down
version of the LGCL for navigation, because we haven't got a specific
list for navigation.
 

Comment 4 Daniel Berrangé 2004-03-11 13:45:23 UTC
Whether they are officially defined by the ESD toolkit all category
list imports make use of the same code in the 'terms' application, so
the nav categories get the same infrastructre as the other categories.
Making changes to way nav categories are handled would affect LGC,
LGSL, etc as well, so we can't simply drop the tracking changes
ability from Nav categories. In addition, it has been indicated that a
nav category tree may be defined by ESD Toolkit in the future, so by
using the same importer we are preparted to adopt this if it does
eventually get defined. So as per my previous comment, we still need
to figure out a solution for the working with updates to categories
managed by the terms application.