139 lines
5.3 KiB
Java
Executable File
139 lines
5.3 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2003-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.cms.search;
|
|
|
|
import com.arsdigita.cms.Asset;
|
|
import com.arsdigita.cms.ContentItem;
|
|
import com.arsdigita.cms.ContentPage;
|
|
import com.arsdigita.domain.DomainObject;
|
|
import com.arsdigita.kernel.Party;
|
|
import com.arsdigita.search.ContentType;
|
|
import com.arsdigita.search.ContentProvider;
|
|
import com.arsdigita.search.MetadataProvider;
|
|
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Date;
|
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
/**
|
|
* This class is an implementation of the Search metadata provider that uses the
|
|
* <code>DomainObjectTextRenderer</code> to extract search content for any
|
|
* subclass of {@link com.arsdigita.cms.ContentItem}.
|
|
*
|
|
* @author <a href="mailto:berrange@redhat.com">Daniel Berrange</a>
|
|
* @version $Revision: 1.1.2.1 $ $Date: 2005/10/04 12:09:55 $
|
|
* @version $Id: ContentItemMetadataProvider.java 2090 2010-04-17 08:04:14Z pboy $
|
|
*/
|
|
public abstract class ContentItemMetadataProvider implements MetadataProvider {
|
|
private static final Logger s_log =
|
|
Logger.getLogger(ContentItemMetadataProvider.class);
|
|
|
|
public String getTypeSpecificInfo(DomainObject dobj) {
|
|
ContentItem item = (ContentItem) dobj;
|
|
return ContentItem.LIVE.equals(item.getVersion()) ?
|
|
ContentItem.LIVE : ContentItem.DRAFT;
|
|
}
|
|
|
|
public java.util.Locale getLocale(DomainObject dobj) {
|
|
ContentItem item = (ContentItem)dobj;
|
|
String lang = item.getLanguage();
|
|
return lang == null ? null : new java.util.Locale(lang,"");
|
|
}
|
|
|
|
public Date getCreationDate(DomainObject dobj) {
|
|
ContentItem item = (ContentItem)dobj;
|
|
return item.getCreationDate();
|
|
}
|
|
|
|
public Party getCreationParty(DomainObject dobj) {
|
|
ContentItem item = (ContentItem)dobj;
|
|
return item.getCreationUser();
|
|
}
|
|
|
|
public Date getLastModifiedDate(DomainObject dobj) {
|
|
ContentItem item = (ContentItem)dobj;
|
|
return item.getLastModifiedDate();
|
|
}
|
|
|
|
public Party getLastModifiedParty(DomainObject dobj) {
|
|
ContentItem item = (ContentItem)dobj;
|
|
return item.getLastModifiedUser();
|
|
}
|
|
|
|
public boolean isIndexable (DomainObject dobj) {
|
|
return true;
|
|
}
|
|
public ContentProvider[] getContent(DomainObject dobj,
|
|
ContentType type) {
|
|
List content = new ArrayList();
|
|
|
|
if (type == ContentType.XML) {
|
|
if (s_log.isDebugEnabled()) {
|
|
s_log.debug("Adding XML Content for " + dobj.getOID());
|
|
}
|
|
content.add(new XMLContentProvider("xml", dobj,
|
|
getClass().getName()));
|
|
} else if (type == ContentType.TEXT) {
|
|
if (s_log.isDebugEnabled()) {
|
|
s_log.debug("Adding Text Content for " + dobj.getOID());
|
|
}
|
|
content.add(new TextContentProvider("text", dobj,
|
|
getClass().getName()));
|
|
if (dobj instanceof ContentPage) {
|
|
if (((ContentPage)dobj).indexAssetsWithPage()) {
|
|
|
|
content.add(new TextContentProvider("text", dobj,
|
|
AssetExtractor.class.getName()));
|
|
}
|
|
} else {
|
|
content.add(new TextContentProvider("text", dobj,
|
|
AssetExtractor.class.getName()));
|
|
}
|
|
} else if (type == ContentType.RAW) {
|
|
// if assets are indexed separately for this type, don't index them here. If that is the case,
|
|
// then the asset itself must have a separate metadataprovider registered to ensure that
|
|
// the asset will be indexed
|
|
if (dobj instanceof ContentPage) {
|
|
if (((ContentPage)dobj).indexAssetsWithPage()) {
|
|
AssetExtractor ex = new AssetExtractor();
|
|
ex.walk(dobj, AssetExtractor.class.getName());
|
|
content.addAll(ex.getContent());
|
|
} // else do nothing
|
|
} else {
|
|
// by default, add content for these items - asset applications should register their own
|
|
// metadataproviders to ensure they react correctly to the value of ContentPage.indexAssetsWithPage
|
|
//
|
|
// only the asset istelf knows how to refer to it's owning article in order to find out if it
|
|
// should be indexed or not
|
|
AssetExtractor ex = new AssetExtractor();
|
|
ex.walk(dobj, AssetExtractor.class.getName());
|
|
content.addAll(ex.getContent());
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return (ContentProvider[])content.toArray(
|
|
new ContentProvider[content.size()]);
|
|
}
|
|
}
|