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,
  

Reply via email to