2. Teil Synchronisieren von ccm-ldn-atoz (patches 1742,1743,1744,1759,1751 von clasohm), neue Datein des patches, ein Hoch auf svn add

git-svn-id: https://svn.libreccm.org/ccm/trunk@76 8810af33-2d31-482b-a856-94f89814c4df
master
pb 2009-02-08 08:54:37 +00:00
parent 52afa2443e
commit a94eed0de3
9 changed files with 419 additions and 2 deletions

View File

@ -0,0 +1,31 @@
//
// 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
model com.arsdigita.london.atoz;
query getAllBlackListTypes {
String objectType;
do {
select ct.classname
from atoz_cat_ct_blacklist_map bm,
content_types ct
where ct.type_id = bm.type_id
} map {
objectType = classname;
}
}

View File

@ -0,0 +1,18 @@
create table atoz_cat_aliases (
object_id NUMERIC not null
constraint atoz_cat_alias_obje_id_p_5h3fv
primary key,
provider_id INTEGER not null,
-- referential constraint for provider_id deferred due to circular dependencies
category_id INTEGER not null,
-- referential constraint for category_id deferred due to circular dependencies
letter CHAR(1) not null,
title VARCHAR(200) not null
);
alter table atoz_cat_aliases add
constraint atoz_cat_alia_categ_id_f_smlu2 foreign key (category_id)
references cat_categories(category_id);
alter table atoz_cat_aliases add
constraint atoz_cat_alia_provi_id_f_c9mnf foreign key (provider_id)
references atoz_cat_provider(provider_id);

View File

@ -0,0 +1,5 @@
@@ ../default/upgrade/add-cat_aliases.sql
insert into atoz_cat_aliases (object_id, provider_id, category_id, letter, title)
select acs_object_id_seq.nextval, m.provider_id, m.category_id, m.letter, m.title
from atoz_cat_alias_map m;

View File

@ -0,0 +1,9 @@
begin;
\i ../default/upgrade/add-cat_aliases.sql
insert into atoz_cat_aliases (object_id, provider_id, category_id, letter, title)
select nextval('acs_object_id_seq'), m.provider_id, m.category_id, m.letter, m.title
from atoz_cat_alias_map m;
commit;

View File

@ -0,0 +1,117 @@
/*
* Copyright (C) 2008 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.atoz;
import java.math.BigDecimal;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import com.arsdigita.categorization.Category;
import com.arsdigita.db.Sequences;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.kernel.Kernel;
import com.arsdigita.kernel.Party;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.PersistenceException;
import com.arsdigita.persistence.metadata.ObjectType;
public class AtoZCategoryAlias extends DomainObject {
private static final Logger s_log = Logger.getLogger(AtoZCategoryAlias.class);
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.london.atoz.AtoZCategoryAlias";
public static final String ID = "id";
public static final String PROVIDER = "provider";
public static final String CATEGORY = "category";
public static final String LETTER = "letter";
public static final String TITLE = "title";
public AtoZCategoryAlias() {
this(BASE_DATA_OBJECT_TYPE);
}
protected AtoZCategoryAlias(String type) {
super(type);
}
public AtoZCategoryAlias(DataObject obj) {
super(obj);
}
public AtoZCategoryAlias(OID oid) {
super(oid);
}
public void setup(Category category, String letter, String title) {
setCategory(category);
setLetter(letter);
setTitle(title);
}
/**
* Called from base class (DomainObject) constructors.
*/
protected void initialize() {
super.initialize();
if (isNew() && get(ID) == null)
set(ID, generateID());
}
public AtoZCategoryProvider getProvider() {
return (AtoZCategoryProvider)get(PROVIDER);
}
public Category getCategory() {
return new Category((DataObject)get(CATEGORY));
}
public void setCategory(Category category) {
set(CATEGORY, category);
}
public String getLetter() {
return (String)get(LETTER);
}
public void setLetter(String letter) {
set(LETTER, letter);
}
public String getTitle() {
return (String)get(TITLE);
}
public void setTitle(String title) {
set(TITLE, title);
}
static BigDecimal generateID() throws PersistenceException {
try {
return Sequences.getNextValue();
} catch (SQLException e) {
final String errorMsg = "Unable to generate a unique " +
"ACSObject id.";
s_log.error(errorMsg);
throw PersistenceException.newInstance(errorMsg, e);
}
}
}

View File

@ -47,10 +47,10 @@ import com.arsdigita.xml.XML;
/**
* Initializes the A-Z system
*
* @version $Id: Initializer.java 1052 2005-12-13 22:52:55Z apevec $
* @version $Id: Initializer.java 1741 2008-09-01 15:38:21Z clasohm $
*/
public class Initializer extends CompoundInitializer {
public final static String versionId = "$Id: Initializer.java 1052 2005-12-13 22:52:55Z apevec $";
public final static String versionId = "$Id: Initializer.java 1741 2008-09-01 15:38:21Z clasohm $";
public Initializer() {
final String url = RuntimeConfig.getConfig().getJDBCURL();

View File

@ -0,0 +1,188 @@
/*
* Copyright (C) 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.atoz.ui.admin;
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
import com.arsdigita.london.atoz.AtoZCategoryProvider;
import com.arsdigita.london.terms.Domain;
import com.arsdigita.london.terms.Term;
import com.arsdigita.aplaws.Aplaws;
import com.arsdigita.bebop.form.Widget;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.parameters.ArrayParameter;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.parameters.BigDecimalParameter;
import com.arsdigita.categorization.Category;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.xml.Element;
import com.arsdigita.xml.XML;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentSection;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
/**
* Copied from com.arsdigita.aplaws.ui.TermWidget.
*
* @author clasohm@redhat.com
*/
public class TermWidget extends com.arsdigita.aplaws.ui.TermWidget {
private static final Logger s_log = Logger.getLogger(TermWidget.class);
private ACSObjectSelectionModel m_provider;
public TermWidget(ACSObjectSelectionModel provider) {
super(null, null);
m_provider = provider;
}
protected void generateWidget(PageState state,
Element parent) {
Domain domain = getDomain(state);
Element widget = parent.newChildElement("cms:categoryWidget",
CMS.CMS_XML_NS);
exportAttributes(widget);
widget.addAttribute("mode", "javascript");
widget.addAttribute("name", getName());
Set ids = new HashSet();
BigDecimal[] values = (BigDecimal[])getValue(state);
if (values != null) {
for (int i = 0 ; i < values.length ; i++) {
ids.add(values[i]);
}
}
// only root terms at first, the rest is loaded on-demand via AJAX
DomainCollection terms = domain.getRootTerms();
terms.addPath("model.parents.link.sortKey");
terms.addPath("model.parents.id");
terms.addPath("domain.key");
// Pull out everything related to the category, otherwise
// another query per row is executed when doing term.getModel();
terms.addPath("model.objectType");
terms.addPath("model.displayName");
terms.addPath("model.defaultDomainClass");
terms.addPath("model.name");
terms.addPath("model.description");
terms.addPath("model.url");
terms.addPath("model.isEnabled");
terms.addPath("model.isAbstract");
terms.addPath("model.defaultAncestors");
List roots = new LinkedList();
while (terms.next()) {
Term term = (Term) terms.getDomainObject();
roots.add(new TermSortKeyPair
(term,(BigDecimal)terms.get("model.parents.link.sortKey")));
}
Element el = generateCategory(widget, domain.getModel(), ids, null);
if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) {
// add attribute to the parent node, so that in stylesheet
// we can look for any ancestor with this attribute (can't
// add attribute to categoryWidget element as that is not
// visible when subbranches are transformed)
el.addAttribute("expand", "all" );
}
for (Iterator i=roots.iterator(); i.hasNext(); ) {
TermSortKeyPair pair = (TermSortKeyPair) i.next();
Term term = pair.getTerm();
BigDecimal sortKey = pair.getSortKey();
generateRootTerm(el, term, ids, sortKey);
}
}
private static void generateRootTerm(Element parent,
Term term,
Set selected,
BigDecimal sortKey) {
Element el = generateTerm(parent, term, selected, sortKey);
el.addAttribute("root","1");
}
private static class TermSortKeyPair {
private Term m_term;
private BigDecimal m_sortKey;
public TermSortKeyPair(Term term, BigDecimal sortKey) {
m_term = term;
m_sortKey = sortKey;
}
public Term getTerm() {
return m_term;
}
public BigDecimal getSortKey() {
return m_sortKey;
}
}
/**
* copied from com.arsdigita.aplaws.ui.ACSObjectCategoryPicker
*/
protected Domain getDomain(PageState state) {
AtoZCategoryProvider provider = (AtoZCategoryProvider)m_provider.getSelectedObject(state);
Category root = Category.getRootForObject(provider);
if (s_log.isDebugEnabled()) {
s_log.debug("Getting domain for " + root.getID());
}
DataCollection domains = SessionManager.getSession()
.retrieve(Domain.BASE_DATA_OBJECT_TYPE);
domains.addEqualsFilter("model.id", root.getID());
if (domains.next()) {
Domain domain = (Domain)DomainObjectFactory
.newInstance(domains.getDataObject());
if (s_log.isDebugEnabled()) {
s_log.debug("Got domain " + domain);
}
domains.close();
return domain;
}
if (s_log.isDebugEnabled()) {
s_log.debug("No domain found");
}
return null;
}
}

View File

@ -0,0 +1,36 @@
// Overrides the version from ccm-cms. This behaves as a single-selection
// widget. It always stores the selection in slot 0, and makes sure the
// previous selection is made clickable again.
function catSelect(id, name) {
var elWidget = $("catWd");
var elWidgetHidden = $("catWdHd");
var found = 0;
for (var i = 0 ; i < elWidget.options.length ; i++) {
if (elWidget.options[i].value == id) {
found = 1;
}
}
if (!found) {
if (elWidget.options[0] != null) {
var prevId = elWidget.options[0].value;
var elLink = $("catLn"+prevId);
var elName = $("catNm"+prevId);
elLink.style.display="inline";
elName.style.display="none";
}
var opt = new Option(name, id);
opt.onclick = "function() { catDeselect('" + id + "'); }";
elWidget.options[0] = opt;
var optHidden = new Option(name, id, false, true);
elWidgetHidden.options[0] = optHidden;
}
var elLink = $("catLn"+id);
var elName = $("catNm"+id);
elLink.style.display="none";
elName.style.display="inline";
return false;
}

View File

@ -0,0 +1,13 @@
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:define="/WEB-INF/bebop-define.tld"
xmlns:show="/WEB-INF/bebop-show.tld"
version="1.2">
<define:page name="childCategories" pageClass="com.arsdigita.cms.ui.authoring.EmptyPage" title="childCategories" cache="true">
<define:component name="catSubtree"
classname="com.arsdigita.aplaws.ui.CategorySubtree"/>
</define:page>
<show:all/>
</jsp:root>