knguyen 2005/08/16 11:56:20 CEST
Modified files:
core/src/java/org/jahia/content ContentObject.java
core/src/java/org/jahia/services/metadata
MetadataBaseService.java
MetadataService.java
core/src/java/org/jahia/services/pages ContentPage.java
core/src/java/org/jahia/services/scheduler
SchedulerServiceImpl.java
Added files:
core/src/java/org/jahia/content ContentSorterByMetadata.java
Log:
- provide content sorter by metadata
Revision Changes Path
1.16 +101 -0 jahia/core/src/java/org/jahia/content/ContentObject.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/content/ContentObject.java.diff?r1=1.15&r2=1.16&f=h
1.1 +674 -0
jahia/core/src/java/org/jahia/content/ContentSorterByMetadata.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/content/ContentSorterByMetadata.java?rev=1.1&content-type=text/plain
1.6 +28 -8
jahia/core/src/java/org/jahia/services/metadata/MetadataBaseService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/metadata/MetadataBaseService.java.diff?r1=1.5&r2=1.6&f=h
1.4 +9 -0
jahia/core/src/java/org/jahia/services/metadata/MetadataService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/metadata/MetadataService.java.diff?r1=1.3&r2=1.4&f=h
1.28 +1 -0
jahia/core/src/java/org/jahia/services/pages/ContentPage.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/pages/ContentPage.java.diff?r1=1.27&r2=1.28&f=h
1.4 +1 -0
jahia/core/src/java/org/jahia/services/scheduler/SchedulerServiceImpl.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/scheduler/SchedulerServiceImpl.java.diff?r1=1.3&r2=1.4&f=h
Index: ContentSorterByMetadata.java
====================================================================
//
// ____.
// __/\ ______| |__/\. _______
// __ .____| | \ | +----+ \
// _______| /--| | | - \ _ | : - \_________
// \\______: :---| : : | : | \________>
// |__\---\_____________:______: :____|____:_____\
// /_____|
//
// . . . i n j a h i a w e t r u s t . . .
//
//
//
//
//
//
// 29.05.2002 NK added in Jahia
package org.jahia.content;
import java.io.Serializable;
import java.sql.*;
import java.util.*;
import java.util.Date;
import java.text.Collator;
import org.jahia.bin.Jahia;
import org.jahia.data.fields.ExpressionMarker;
import org.jahia.data.containers.*;
import org.jahia.exceptions.JahiaException;
import org.jahia.resourcebundle.ResourceBundleMarker;
import org.jahia.services.fields.ContentField;
import org.jahia.services.version.EntryLoadRequest;
import org.jahia.services.metadata.MetadataService;
import org.jahia.utils.JahiaTools;
import org.jahia.registries.ServicesRegistry;
import org.jahia.hibernate.manager.JahiaLinkManager;
import org.jahia.hibernate.manager.SpringContextSingleton;
public class ContentSorterByMetadata implements Serializable{
static private String GET_METADATA_FIELDS_BY_NAME
= "SELECT DISTINCT a.id_jahia_fields_data FROM jahia_fields_data
a, jahia_fields_def b, jahia_fields_def_extprop c WHERE
a.fielddefid_jahia_fields_data=b.id_jahia_fields_def AND
b.name_jahia_fields_def=? AND b.id_jahia_fields_def=c.id_jahia_fields_def AND
c.prop_name=? AND c.prop_value=?";
private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(ContentSorterByMetadata.class);
protected int siteId = -1;
protected String fieldName;
protected String contentType;
protected boolean numberSort = false;
private String numberFormat = NumberFormats.LONG_FORMAT;
protected boolean ASC_Ordering = true; // by default ASCENDANT ORDER.
protected Vector result;
protected EntryLoadRequest entryLoadRequest = EntryLoadRequest.CURRENT;
/**
*
* @param siteId
* @param fieldName
* @param contentType
* @param boolean , force field values to be converted to number
representation before sorting ( if true ).
* @param numberFormat, only used if numberSort is true. If null, the
format used is NumberFormat.LONG_FORMAT
* @param entryLoadRequest
* @throws org.jahia.exceptions.JahiaException
*/
public ContentSorterByMetadata(int siteId,
String fieldName,
String contentType,
boolean numberSort,
String numberFormat,
EntryLoadRequest entryLoadRequest )
throws JahiaException
{
this.siteId = siteId;
this.fieldName = fieldName;
this.contentType = contentType;
this.numberSort = numberSort;
if (NumberFormats.isValidFormat(numberFormat)) {
this.numberFormat = numberFormat;
}
if (entryLoadRequest != null){
this.entryLoadRequest = entryLoadRequest;
}
}
public Vector doSort()
{
this.result = null;
try {
// get all container ids
if ( this.numberSort )
{
this.result = doNumberSort();
} else {
this.result = doStringSort();
}
} catch ( Throwable t ){
logger.error("Exception occured :" + t.getMessage(), t);
}
return this.result;
}
//--------------------------------------------------------------------------
/**
* Return the vector of sorted ctnids.
*
*/
public Vector result()
{
return this.result;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
//--------------------------------------------------------------------------
/**
* Return the order , true - > ASC, false -> DESC.
*
*/
public boolean isAscOrdering()
{
return this.ASC_Ordering;
}
//--------------------------------------------------------------------------
/**
* Return true, if the values are converted to number before sorting.
*
*/
public boolean isNumberOrdering()
{
return this.numberSort;
}
//--------------------------------------------------------------------------
/**
* Force or not value to be converted to number before doing the sort.
*
*/
public boolean setNumberOrdering(boolean val)
{
return this.numberSort = val;
}
//--------------------------------------------------------------------------
/**
* Set DESC ordering.
*
*/
public void setDescOrdering()
{
this.ASC_Ordering = false;
}
//--------------------------------------------------------------------------
/**
* Set ASC ordering.
*
*/
public boolean setAscOrdering()
{
return this.ASC_Ordering = true;
}
//--------------------------------------------------------------------------
/**
* Set ASC ordering.
*
*/
public boolean setAscOrdering(boolean val)
{
return this.ASC_Ordering = val;
}
//--------------------------------------------------------------------------
/**
* Return the site id.
*
* @return
*/
public int getSiteId()
{
return this.siteId;
}
//--------------------------------------------------------------------------
/**
* Return the sorting field.
*
* @return String , the name of fields used for sorting.
*/
public String getSortingFieldName ()
{
return this.fieldName;
}
//--------------------------------------------------------------------------
public EntryLoadRequest getEntryLoadRequest(){
return this.entryLoadRequest;
}
//--------------------------------------------------------------------------
/**
* Load an hashtable of pair/value (objectkey,fieldValue) .
*
*
* @return
* @throws org.jahia.exceptions.JahiaException
*/
protected Vector getFieldValues()
throws JahiaException
{
ArrayList stagingFields = getStagingFields();
StringBuffer buff = new StringBuffer("SELECT DISTINCT
a.id_jahia_fields_data,a.value_jahia_fields_data,a.workflow_state,a.language_code
FROM jahia_fields_data a, jahia_fields_def b, jahia_fields_def_extprop c WHERE
a.fielddefid_jahia_fields_data=b.id_jahia_fields_def AND
b.name_jahia_fields_def='");
buff.append(this.getSortingFieldName());
buff.append("' AND b.id_jahia_fields_def=c.id_jahia_fields_def AND
c.prop_name='");
buff.append("isMetadata");
buff.append("' AND c.prop_value='yes' ");
if ( siteId != -1 ){
buff.append(" AND a.jahiaid_jahia_fields_data=" + siteId);
buff.append(" AND (");
} else {
buff.append(" AND (");
}
buff.append(getMultilangAndStagingFiltering("a.workflow_state","a.language_code","a.version_id",
this.entryLoadRequest,true));
buff.append(") ORDER BY ");
buff.append("a.id_jahia_fields_data");
buff.append(",");
buff.append("a.workflow_state");
Connection dbConn = null;
Statement stmt = null;
ResultSet rs = null;
Locale locale = this.getEntryLoadRequest().getFirstLocale(true);
if ( locale == null ){
locale = Locale.ENGLISH;
}
Collator collator = this.getCollator();
Vector datas = new Vector();
HashMap maps = new HashMap();
try
{
dbConn =
org.jahia.services.database.ConnectionDispenser.getConnection();
stmt = dbConn.createStatement();
rs = stmt.executeQuery( buff.toString() );
while (rs.next())
{
int fieldID = rs.getInt(1);
String fieldValue = rs.getString(2);
int workflowState = rs.getInt(3);
String languageCode = rs.getString(4);
//if ( this.entryLoadRequest.isCurrent()){
if ( workflowState >
EntryLoadRequest.ACTIVE_WORKFLOW_STATE ){
workflowState =
EntryLoadRequest.STAGING_WORKFLOW_STATE;
}
if (Jahia.getThreadParamBean() != null) {
// expression marker
ExpressionMarker exprMarker =
ExpressionMarker.parseMarkerValue(fieldValue, Jahia.getThreadParamBean());
if ( exprMarker != null ){
try {
String value = exprMarker.getValue();
if ( value != null && !"".equals(value) ){
fieldValue = value;
}
}
catch (Throwable t) {
logger.debug("Problem while evaluating
expression " + exprMarker.getExpr(), t);
}
}
}
// resbundle marker
ResourceBundleMarker resMarker =
ResourceBundleMarker.parseMarkerValue(fieldValue);
if ( resMarker != null ){
try {
String value = resMarker.getValue(locale);
if ( value != null && !"".equals(value) ){
fieldValue = value;
}
}
catch (Throwable t) {
}
}
TempField aField = new
TempField(fieldID,0,workflowState,languageCode,fieldValue);
String key = fieldID + "_" + workflowState + "_" +
languageCode;
maps.put(key,aField);
//}
}
}
catch (SQLException se)
{
String errorMsg = "Error in getFieldValues : " + se.getMessage();
logger.error(errorMsg, se);
} finally {
closeStatement (stmt);
}
Vector addedIds = new Vector();
int size = maps.size();
Iterator iterator = maps.values().iterator();
JahiaObject jahiaObject;
MetadataService metadataServ =
ServicesRegistry.getInstance().getMetadataService();
boolean checkContentType = ( this.contentType != null );
while ( iterator.hasNext() ){
TempField aField = (TempField)iterator.next();
if ( !addedIds.contains(new Integer(aField.id)) ){
String key = aField.id + "_" + aField.workflowState + "_" +
locale.toString();
if (!aField.languageCode.equals(ContentField.SHARED_LANGUAGE)
&&
maps.containsKey(key) &&
!aField.languageCode.equals(locale.toString())) {
continue;
} else if
(!aField.languageCode.equals(ContentField.SHARED_LANGUAGE) &&
!maps.containsKey(key)) {
// this field doesn't exist in the given language, so
sort it as "" value
aField.value = "";
}
Object obj = null;
jahiaObject =
metadataServ.getOwnerObjectOfMetadata((ObjectKey)new
ContentFieldKey(aField.id));
if ( checkContentType &&
!jahiaObject.getObjectKey().getType().equals(contentType)) {
continue;
}
if (this.numberSort) {
obj = new
DataBean(jahiaObject.getObjectKey(),aField.value);
} else {
obj = new StrDataBean(jahiaObject.getObjectKey(),
aField.value, collator);
}
if (this.entryLoadRequest.isCurrent()) {
datas.add(obj);
addedIds.add(new Integer(aField.id));
} else if (this.entryLoadRequest.isStaging()
&&
aField.workflowState >
EntryLoadRequest.ACTIVE_WORKFLOW_STATE) {
datas.add(obj);
addedIds.add(new Integer(aField.id));
} else if (aField.workflowState ==
EntryLoadRequest.ACTIVE_WORKFLOW_STATE
&& !stagingFields.contains(new
Integer(aField.id))) {
datas.add(obj);
addedIds.add(new Integer(aField.id));
}
}
}
return datas;
}
//--------------------------------------------------------------------------
/**
* Containers are sorted after sorting field's data are loaded and
converted to
* a long representation.
*
* @return Vector, vector of sorted ctn ids.
*/
protected Vector doStringSort() throws JahiaException
{
Vector results = new Vector();
Vector datas = this.getFieldValues();
Collator collator = this.getCollator();
// sort the datas
if ( datas.size()>1 ){
// a dummy dataBean
StrDataBean dummyDataBean = new StrDataBean(ASC_Ordering,
collator);
Collections.sort(datas,dummyDataBean);
}
// retrieve sorted ids
int size = datas.size();
BitSet sortedBitSet = new BitSet();
StrDataBean dataBean = null;
for ( int i=0; i<size ; i++ ){
dataBean = (StrDataBean)datas.get(i);
results.add(dataBean.objectKey);
}
return results;
}
//--------------------------------------------------------------------------
/**
* Containers are sorted after sorting field's data are loaded and
converted to
* a long representation.
*
*/
protected Vector doNumberSort() throws JahiaException
{
Vector results = new Vector();
Vector datas = this.getFieldValues();
// sort the datas
if ( datas.size()>1 ){
// a dummy dataBean
DataBean dummyDataBean = new DataBean(ASC_Ordering);
Collections.sort(datas,dummyDataBean);
}
// retrieve sorted ids
int size = datas.size();
BitSet sortedBitSet = new BitSet();
DataBean dataBean = null;
for ( int i=0; i<size ; i++ ){
dataBean = (DataBean)datas.get(i);
results.add(dataBean.objectKey);
}
return results;
}
//-------------------------------------------------------------------------
protected void closeStatement (Statement statement)
{
// Close the opened statement
try {
if (statement!=null) {
statement.close();
}
}
catch (SQLException sqlEx) {
// just create an exception without raising it, just to notify it
// in the logs.
JahiaException je = new JahiaException ("Cannot close a
statement",
"Cannot close a statement", JahiaException.DATABASE_ERROR,
JahiaException.WARNING_SEVERITY, sqlEx);
logger.error("Error:", je);
}
}
protected class DataBean implements Comparator
{
ObjectKey objectKey = null;
String value = null;
boolean ASC_Ordering = true;
public DataBean (ObjectKey objectKey, String value)
{
this.objectKey = objectKey;
this.value = value;
}
public DataBean (boolean ASC_Ordering)
{
this.ASC_Ordering = ASC_Ordering;
}
public int compare(Object obj1, Object obj2) throws
ClassCastException {
DataBean dataBean1 = (DataBean)obj1;
DataBean dataBean2 = (DataBean)obj2;
if ( ASC_Ordering ){
return
NumberFormats.compareNumber(dataBean1.value,dataBean2.value, numberFormat);
} else {
return
NumberFormats.compareNumber(dataBean2.value,dataBean1.value, numberFormat);
}
}
}
//--------------------------------------------------------------------------
protected class StrDataBean implements Comparator
{
ObjectKey objectKey = null;
String value = "";
boolean ASC_Ordering = true;
Collator collator = null;
public StrDataBean (ObjectKey objectKey, String value, Collator
collator)
{
this.objectKey = objectKey;
this.value = value;
this.collator = collator;
if ( this.collator == null ){
this.collator = Collator.getInstance();
}
}
public StrDataBean (boolean ASC_Ordering, Collator collator)
{
this.ASC_Ordering = ASC_Ordering;
this.collator = collator;
if ( this.collator == null ){
this.collator = Collator.getInstance();
}
}
public int compare(Object obj1, Object obj2) throws
ClassCastException {
StrDataBean dataBean1 = (StrDataBean)obj1;
StrDataBean dataBean2 = (StrDataBean)obj2;
String valueBean1 = "";
if ( dataBean1 != null ){
valueBean1 = dataBean1.value;
}
String valueBean2 = "";
if ( dataBean2 != null ){
valueBean2 = dataBean2.value;
}
if ( valueBean1 == null ){
valueBean1 = "";
}
if ( valueBean2 == null ){
valueBean2 = "";
}
if ( this.ASC_Ordering ){
return collator.compare(valueBean1,valueBean2);
} else {
return collator.compare(valueBean2,valueBean1);
}
}
}
protected class TempField{
public int id;
public int versionID;
public int workflowState;
public String languageCode;
public String value;
public TempField(int id, int versionID, int workflowState,
String languageCode, String value){
this.id = id;
this.versionID = versionID;
this.workflowState = workflowState;
this.languageCode = languageCode;
this.value = value;
}
}
//--------------------------------------------------------------------------
/**
* Returns an array of fields that are in staging.
*
* @return
* @throws org.jahia.exceptions.JahiaException
*/
protected ArrayList getStagingFields()
throws JahiaException
{
ArrayList datas = new ArrayList();
Connection dbConn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
StringBuffer buff = new
StringBuffer(this.GET_METADATA_FIELDS_BY_NAME);
if ( siteId != -1 ){
buff.append(" AND a.jahiaid_jahia_fields_data=?");
}
buff.append(" AND a.workflow_state>1 ");
try
{
dbConn =
org.jahia.services.database.ConnectionDispenser.getConnection();
stmt = dbConn.prepareStatement (buff.toString());
stmt.setString (1, this.fieldName);
stmt.setString(2,"isMetadata");
stmt.setString(3,"yes");
if ( siteId != -1 ){
stmt.setInt(4,siteId);
}
rs = stmt.executeQuery ();
while (rs.next()) {
datas.add(new Integer(rs.getInt(1)));
}
}
catch (SQLException se)
{
String errorMsg = "Error in getStagingFields() : " +
se.getMessage();
logger.error(errorMsg, se);
} finally {
closeStatement (stmt);
}
return datas;
}
/**
* Return the collator instantiated with the first locale from the
internal EntryLoadRequest.
* If the entryLoadRequest is null, the localtor is instantiated with
the default locale of the system
* @return
*/
protected Collator getCollator(){
Collator collator = Collator.getInstance();
if ( this.getEntryLoadRequest() != null ){
Locale locale = null;
locale = this.getEntryLoadRequest().getFirstLocale(true);
if ( locale != null ){
collator = Collator.getInstance(locale);
}
}
return collator;
}
//--------------------------------------------------------------------------
/**
*
* @return
*/
protected String getMultilangAndStagingFiltering(String workflowColumn,
String langColumn,
String versionColumn,
EntryLoadRequest
entryLoadRequest,
boolean ignoreLang){
StringBuffer strBuf = new StringBuffer(" ");
if ( entryLoadRequest.isCurrent()){
strBuf.append(workflowColumn);
strBuf.append("=");
strBuf.append(EntryLoadRequest.ACTIVE_WORKFLOW_STATE);
} else if ( entryLoadRequest.isStaging() ) {
strBuf.append(workflowColumn);
strBuf.append(">");
strBuf.append(EntryLoadRequest.VERSIONED_WORKFLOW_STATE);
strBuf.append(" AND ");
strBuf.append(versionColumn);
strBuf.append(" <> -1 ");
} else {
strBuf.append(versionColumn);
strBuf.append("=");
strBuf.append(entryLoadRequest.getVersionID());
}
if ( !ignoreLang ) {
String languageCode = entryLoadRequest.getFirstLocale(true).
toString();
strBuf.append(" AND (");
strBuf.append(langColumn);
strBuf.append("='");
strBuf.append(JahiaTools.quote(languageCode));
strBuf.append("' OR ");
strBuf.append(langColumn);
strBuf.append("='");
strBuf.append(ContentField.SHARED_LANGUAGE);
strBuf.append("') ");
}
return strBuf.toString();
}
}
Index: ContentObject.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/content/ContentObject.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- ContentObject.java 12 Jul 2005 13:52:51 -0000 1.15
+++ ContentObject.java 16 Aug 2005 09:56:18 -0000 1.16
@@ -19,6 +19,8 @@
import org.jahia.exceptions.JahiaException;
import org.jahia.params.ProcessingContext;
import org.jahia.data.fields.JahiaFieldDefinition;
+import org.jahia.data.fields.JahiaField;
+import org.jahia.data.fields.LoadFlags;
import org.jahia.services.acl.JahiaBaseACL;
import org.jahia.services.usermanager.JahiaUser;
import org.jahia.services.fields.*;
@@ -31,6 +33,8 @@
import org.jahia.services.importexport.ImportExportBaseService;
import org.jahia.hibernate.manager.JahiaLinkManager;
import org.jahia.hibernate.manager.SpringContextSingleton;
+import org.jahia.hibernate.manager.JahiaObjectDelegate;
+import org.jahia.hibernate.manager.JahiaObjectManager;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -49,10 +53,12 @@
public static final String SHARED_LANGUAGE = "shared";
private JahiaBaseACL acl;
private static JahiaLinkManager linkManager;
+ private static JahiaObjectManager jahiaObjectManager;
protected ContentObject(ObjectKey objectKey) {
super(objectKey);
linkManager = (JahiaLinkManager)
SpringContextSingleton.getInstance().getContext().getBean(JahiaLinkManager.class.getName());
+ jahiaObjectManager = (JahiaObjectManager)
SpringContextSingleton.getInstance().getContext().getBean(JahiaObjectManager.class.getName());
}
/**
@@ -1297,6 +1303,86 @@
}
/**
+ * Returns the metadata as a JahiaField instance
+ *
+ * @param name the metadata name
+ * @param jParams
+ * @return
+ * @throws JahiaException
+ */
+ public JahiaField getMetadataAsJahiaField(String name,
+ ProcessingContext jParams) throws
JahiaException {
+
+ JahiaObject jahiaObject = this.getMetadata(name);
+ if ( jahiaObject == null ){
+ return null;
+ }
+ try {
+ JahiaField jahiaField =
ServicesRegistry.getInstance().getJahiaFieldService()
+
.loadField(Integer.parseInt(jahiaObject.getObjectKey().getIDInType()),
+ LoadFlags.ALL,jParams);
+ return jahiaField;
+ } catch ( Throwable t){
+ logger.debug("Exception loading metadata :"+ name,t);
+ }
+ return null;
+ }
+
+ /**
+ * Returns the metadata value
+ *
+ * @param name the metadata name
+ * @param jParams
+ * @param defaultValue
+ * @return
+ * @throws JahiaException
+ */
+ public String getMetadataValue(String name,
+ ProcessingContext jParams,
+ String defaultValue) throws
JahiaException {
+
+ JahiaObject jahiaObject = this.getMetadata(name);
+ if ( jahiaObject == null ){
+ return defaultValue;
+ }
+ try {
+ JahiaField jahiaField =
ServicesRegistry.getInstance().getJahiaFieldService()
+
.loadField(Integer.parseInt(jahiaObject.getObjectKey().getIDInType()),
+ LoadFlags.ALL,jParams);
+ return jahiaField.getValue();
+ } catch ( Throwable t){
+ logger.debug("Exception getting value from metadata :"+ name,t);
+ }
+ return defaultValue;
+ }
+
+ /**
+ * Returns the metadata values
+ *
+ * @param name the metadata name
+ * @param jParams
+ * @return
+ * @throws JahiaException
+ */
+ public String[] getMetadataValues(String name,
+ ProcessingContext jParams) throws
JahiaException {
+
+ JahiaObject jahiaObject = this.getMetadata(name);
+ if ( jahiaObject == null ){
+ return new String[]{};
+ }
+ try {
+ ContentField contentField = ContentField.getField(
+
Integer.parseInt(jahiaObject.getObjectKey().getIDInType()));
+ JahiaField jahiaField =
contentField.getJahiaField(jParams.getEntryLoadRequest());
+ return jahiaField.getValues();
+ } catch ( Throwable t){
+ logger.debug("Exception getting value from metadata :"+ name,t);
+ }
+ return new String[]{};
+ }
+
+ /**
* Create a "metadata" strutural relationship with this one
*
* @throws JahiaException
@@ -1429,4 +1515,19 @@
}
return status;
}
+
+ /**
+ * Return true if this object is available ( not EXPIRED_STATE or not in
NOT_VALID_STATE )
+ * @see TimebasedPublishingState
+ * @return
+ */
+ public boolean (){
+ JahiaObjectDelegate jahiaObject =
+
jahiaObjectManager.getJahiaObjectDelegate(this.getObjectKey());
+ if ( jahiaObject != null ){
+ return jahiaObject.isValid();
+ }
+ return true;
+ }
+
}
Index: MetadataBaseService.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/services/metadata/MetadataBaseService.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- MetadataBaseService.java 12 Jul 2005 13:53:01 -0000 1.5
+++ MetadataBaseService.java 16 Aug 2005 09:56:19 -0000 1.6
@@ -20,10 +20,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
+import java.util.*;
import javax.jcr.Repository;
import javax.jcr.Session;
@@ -34,9 +31,7 @@
import javax.jcr.nodetype.PropertyDef;
import org.aopalliance.intercept.Interceptor;
-import org.jahia.content.ContentDefinition;
-import org.jahia.content.ObjectKey;
-import org.jahia.content.ContentFieldKey;
+import org.jahia.content.*;
import org.jahia.data.events.JahiaEventListenerInterface;
import org.jahia.data.fields.JahiaField;
import org.jahia.data.fields.JahiaFieldDefinition;
@@ -47,6 +42,8 @@
import org.jahia.registries.ServicesRegistry;
import org.jahia.services.fields.ContentField;
import org.jahia.settings.SettingsBean;
+import org.jahia.hibernate.manager.JahiaLinkManager;
+import org.jahia.hibernate.manager.SpringContextSingleton;
import org.springframework.aop.framework.Advised;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
@@ -86,7 +83,6 @@
public void init( SettingsBean jSettings )
throws JahiaInitializationException {
-
StringBuffer buff = new
StringBuffer(jSettings.getJahiaEtcDiskPath());
buff.append(File.separator);
buff.append("spring");
@@ -384,6 +380,30 @@
}
/**
+ * Return the given JahiaObject that owning a metadata
+ * @see org.jahia.content.StructuralRelationship.METADATA_LINK
+ *
+ * @return a JahiaObject
+ */
+ public JahiaObject getOwnerObjectOfMetadata(ObjectKey metadataKey)
throws JahiaException {
+ JahiaObject jahiaObject = null;
+ JahiaLinkManager linkManager = (JahiaLinkManager)
+
SpringContextSingleton.getInstance().getContext().getBean(JahiaLinkManager.class.getName());
+
+ List links = linkManager.findByTypeAndLeftObjectKey(
+ StructuralRelationship.METADATA_LINK, metadataKey);
+ for ( int i=0 ; i<links.size(); i++ ){
+ ObjectLink link = (ObjectLink)links.get(i);
+ try {
+ jahiaObject =
ContentObject.getInstance(link.getRightObjectKey());
+ } catch (Throwable t) {
+ logger.debug(t);
+ }
+ }
+ return jahiaObject;
+ }
+
+ /**
* Returns an array of ObjectKey that are metadatas
*
* @param name String, the metadata name
Index: MetadataService.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/services/metadata/MetadataService.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MetadataService.java 6 Aug 2004 15:33:21 -0000 1.3
+++ MetadataService.java 16 Aug 2005 09:56:19 -0000 1.4
@@ -18,6 +18,7 @@
import org.aopalliance.intercept.Interceptor;
import org.jahia.content.ContentDefinition;
import org.jahia.content.ObjectKey;
+import org.jahia.content.JahiaObject;
import org.jahia.data.events.JahiaEventListenerInterface;
import org.jahia.data.fields.JahiaField;
import org.jahia.data.fields.JahiaFieldDefinition;
@@ -157,5 +158,13 @@
public abstract ArrayList getMetadataByName(String name)
throws JahiaException;
+ /**
+ * Return the given JahiaObject that owning a metadata
+ * @see org.jahia.content.StructuralRelationship.METADATA_LINK
+ *
+ * @return a JahiaObject
+ */
+ public abstract JahiaObject getOwnerObjectOfMetadata(ObjectKey
metadataKey) throws JahiaException;
+
}
Index: ContentPage.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/services/pages/ContentPage.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- ContentPage.java 11 Aug 2005 11:13:49 -0000 1.27
+++ ContentPage.java 16 Aug 2005 09:56:19 -0000 1.28
@@ -5097,4 +5097,5 @@
/** @todo is there a better way to do this ? */
ServicesRegistry.getInstance().getCacheService().getHtmlCacheInstance().flush();
}
+
}
Index: SchedulerServiceImpl.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/services/scheduler/SchedulerServiceImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SchedulerServiceImpl.java 12 Jul 2005 13:53:01 -0000 1.3
+++ SchedulerServiceImpl.java 16 Aug 2005 09:56:19 -0000 1.4
@@ -110,6 +110,7 @@
private JahiaException getJahiaException(SchedulerException se) {
if (se.getUnderlyingException() != null) {
+ se.getUnderlyingException().printStackTrace();
return new JahiaException("Error while shutting down scheduler
service",
"Error while shutting down scheduler
service",
JahiaException.SERVICE_ERROR,