Hi Andreas,

On Mon, 2006-09-18 at 14:30 +0000, [EMAIL PROTECTED] wrote:
> Author: andreas
> Date: Mon Sep 18 07:30:28 2006
> New Revision: 447411
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=447411
> Log:
> Introduce onCopy action configuration for meta data, don't copy workflow meta 
> data

What exactly is the reason not to copy the workflow meta data?
Now the workflow meta data gets lost when a document is moved to the
trash/archive area. As a consequence, the document cannot be restored
anymore, because the workflow information is missing.

Does anybody have an idea how this could be fixed?

thanks,
josias

> 
> Modified:
>     
> lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ConfigurableElementSet.java
>     lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ElementImpl.java
>     lenya/trunk/src/impl/test/org/apache/lenya/cms/metadata/MetaDataTest.java
>     lenya/trunk/src/java/org/apache/lenya/cms/metadata/Element.java
>     
> lenya/trunk/src/modules-core/workflow-impl/config/cocoon-xconf/workflow-metadata.xconf
>     
> lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeMetaData.java
> 
> Modified: 
> lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ConfigurableElementSet.java
> URL: 
> http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ConfigurableElementSet.java?view=diff&rev=447411&r1=447410&r2=447411
> ==============================================================================
> --- 
> lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ConfigurableElementSet.java
>  (original)
> +++ 
> lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ConfigurableElementSet.java
>  Mon Sep 18 07:30:28 2006
> @@ -48,7 +48,27 @@
>              String name = attributeConfigs[i].getAttribute("name");
>              boolean isMultiple = 
> attributeConfigs[i].getAttributeAsBoolean("multiple", false);
>              boolean isEditable = 
> attributeConfigs[i].getAttributeAsBoolean("editable", false);
> -            this.elements.put(name, new ElementImpl(name, isMultiple, 
> isEditable));
> +            String actionOnCopy = attributeConfigs[i].getAttribute("onCopy", 
> "copy");
> +            ElementImpl element = new ElementImpl(name, isMultiple, 
> isEditable);
> +            int action;
> +            if (actionOnCopy.equalsIgnoreCase("copy")) {
> +                action = Element.ONCOPY_COPY;
> +            }
> +            else if (actionOnCopy.equalsIgnoreCase("ignore")) {
> +                action = Element.ONCOPY_IGNORE;
> +            }
> +            else if (actionOnCopy.equalsIgnoreCase("delete")) {
> +                action = Element.ONCOPY_DELETE;
> +            }
> +            else {
> +                throw new ConfigurationException("The action [" + 
> actionOnCopy + "] is not supported.");
> +            }
> +            try {
> +                element.setActionOnCopy(action);
> +            } catch (MetaDataException e) {
> +                throw new RuntimeException(e);
> +            }
> +            this.elements.put(name, element);
>          }
>  
>      }
> 
> Modified: 
> lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ElementImpl.java
> URL: 
> http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ElementImpl.java?view=diff&rev=447411&r1=447410&r2=447411
> ==============================================================================
> --- lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ElementImpl.java 
> (original)
> +++ lenya/trunk/src/impl/java/org/apache/lenya/cms/metadata/ElementImpl.java 
> Mon Sep 18 07:30:28 2006
> @@ -42,11 +42,11 @@
>       * Ctor.
>       * @param name The name.
>       * @param isMultiple if the element can have multiple values.
> +     * @param isEditable  if the element can be edited.
>       * @param description The description of the element.
>       */
> -    public ElementImpl(String name, boolean isMultiple, String description) {
> -        this.name = name;
> -        this.multiple = isMultiple;
> +    public ElementImpl(String name, boolean isMultiple, boolean isEditable, 
> String description) {
> +        this(name, isMultiple, isEditable);
>          this.description = description;
>      }
>  
> @@ -64,6 +64,20 @@
>  
>      public boolean isEditable() {
>          return this.editable;
> +    }
> +    
> +    private int actionOnCopy;
> +
> +    public int getActionOnCopy() {
> +        return this.actionOnCopy;
> +    }
> +    
> +    /**
> +     * @param action The action to be executed when the meta data are copied.
> +     * @throws MetaDataException if the action is not supported.
> +     */
> +    public void setActionOnCopy(int action) throws MetaDataException {
> +        this.actionOnCopy = action;
>      }
>  
>  }
> 
> Modified: 
> lenya/trunk/src/impl/test/org/apache/lenya/cms/metadata/MetaDataTest.java
> URL: 
> http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/cms/metadata/MetaDataTest.java?view=diff&rev=447411&r1=447410&r2=447411
> ==============================================================================
> --- lenya/trunk/src/impl/test/org/apache/lenya/cms/metadata/MetaDataTest.java 
> (original)
> +++ lenya/trunk/src/impl/test/org/apache/lenya/cms/metadata/MetaDataTest.java 
> Mon Sep 18 07:30:28 2006
> @@ -16,9 +16,13 @@
>   */
>  package org.apache.lenya.cms.metadata;
>  
> +import java.util.Map;
> +
> +import org.apache.avalon.framework.service.ServiceException;
>  import org.apache.lenya.ac.impl.AbstractAccessControlTest;
>  import org.apache.lenya.cms.metadata.dublincore.DublinCore;
>  import org.apache.lenya.cms.publication.Document;
> +import org.apache.lenya.cms.publication.DocumentBuildException;
>  import org.apache.lenya.cms.publication.DocumentFactory;
>  import org.apache.lenya.cms.publication.DocumentUtil;
>  import org.apache.lenya.cms.publication.Publication;
> @@ -52,12 +56,12 @@
>  
>          namespaceUri = DublinCore.DC_NAMESPACE;
>          MetaData dc = doc.getMetaData(namespaceUri);
> -        
> +
>          doc.getRepositoryNode().lock();
> -        
> +
>          checkSetTitle(dc);
>          checkRemoveAllValues(dc);
> -        
> +
>      }
>  
>      protected void checkSetTitle(MetaData dc) throws MetaDataException {
> @@ -69,7 +73,7 @@
>          }
>          assertNotNull(e);
>          dc.setValue("title", "This is the title");
> -        
> +
>          e = null;
>          // addValue() should throw an exception because a value is already 
> set
>          try {
> @@ -78,12 +82,113 @@
>              e = e1;
>          }
>          assertNotNull(e);
> +
> +    }
> +
> +    String NAMESPACE = "http://apache.org/lenya/test/metadata";;
> +
> +    protected void checkOnCopy(Publication pub) throws Exception {
> +        MetaDataRegistry registry = null;
> +        try {
> +            registry = (MetaDataRegistry) 
> getManager().lookup(MetaDataRegistry.ROLE);
> +            ElementSet set = new TestElementSet();
> +            registry.register(NAMESPACE, set);
> +        }
> +        finally {
> +            getManager().release(registry);
> +        }
> +        
> +        DocumentFactory factory = getFactory();
> +        Document source = factory.get(pub, Publication.AUTHORING_AREA, 
> "/index", "en");
> +        Document target = factory.get(pub, Publication.AUTHORING_AREA, 
> "/index", "en");
> +        
> +        MetaData sourceMeta = source.getMetaData(NAMESPACE);
> +        sourceMeta.setValue("copy", "sourceCopy");
> +        sourceMeta.setValue("ignore", "sourceIgnore");
> +        sourceMeta.setValue("delete", "sourceDelete");
> +        
> +        MetaData targetMeta = target.getMetaData(NAMESPACE);
> +        targetMeta.setValue("ignore", "targetIgnore");
> +        targetMeta.setValue("delete", "targetDelete");
> +        
> +        targetMeta.replaceBy(sourceMeta);
> +        
> +        assertTrue(targetMeta.getValues("copy").length == 1);
> +        assertEquals(sourceMeta.getValues("copy"), 
> targetMeta.getValues("copy"));
>          
> +        assertTrue(targetMeta.getValues("ignore").length == 1);
> +        assertEquals(targetMeta.getFirstValue("ignore"), "targetIgnore");
> +        
> +        assertTrue(targetMeta.getValues("delete").length == 0);
>      }
>  
>      protected void checkRemoveAllValues(MetaData dc) throws 
> MetaDataException {
>          dc.removeAllValues("title");
>          assertTrue(dc.getValues("title").length == 0);
>      }
> -    
> +
> +    protected class TestElement implements Element {
> +
> +        private String name;
> +        private int actionOnCopy;
> +
> +        protected TestElement(String name, int actionOnCopy) {
> +            this.name = name;
> +            this.actionOnCopy = actionOnCopy;
> +        }
> +
> +        public int getActionOnCopy() {
> +            return actionOnCopy;
> +        }
> +
> +        public String getDescription() {
> +            return "";
> +        }
> +
> +        public String getName() {
> +            return name;
> +        }
> +
> +        public boolean isEditable() {
> +            return false;
> +        }
> +
> +        public boolean isMultiple() {
> +            return false;
> +        }
> +
> +    }
> +
> +    protected class TestElementSet implements ElementSet {
> +
> +        private Element[] elements = { new TestElement("copy", 
> Element.ONCOPY_COPY),
> +                new TestElement("ignore", Element.ONCOPY_IGNORE),
> +                new TestElement("delete", Element.ONCOPY_DELETE) };
> +        
> +        private Map name2element;
> +
> +        protected TestElementSet() {
> +            for (int i = 0; i < elements.length; i++) {
> +                this.name2element.put(elements[i].getName(), elements[i]);
> +            }
> +        }
> +
> +        public boolean containsElement(String name) {
> +            return true;
> +        }
> +
> +        public Element getElement(String name) throws MetaDataException {
> +            return (Element) this.name2element.get(name);
> +        }
> +
> +        public Element[] getElements() {
> +            return elements;
> +        }
> +
> +        public String getNamespaceUri() {
> +            return NAMESPACE;
> +        }
> +
> +    }
> +
>  }
> 
> Modified: lenya/trunk/src/java/org/apache/lenya/cms/metadata/Element.java
> URL: 
> http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/metadata/Element.java?view=diff&rev=447411&r1=447410&r2=447411
> ==============================================================================
> --- lenya/trunk/src/java/org/apache/lenya/cms/metadata/Element.java (original)
> +++ lenya/trunk/src/java/org/apache/lenya/cms/metadata/Element.java Mon Sep 
> 18 07:30:28 2006
> @@ -20,25 +20,45 @@
>   * A meta data element.
>   */
>  public interface Element {
> -    
> +
>      /**
>       * @return the name of the element.
>       */
>      String getName();
> -    
> +
>      /**
>       * @return if the element can have multiple values.
>       */
>      boolean isMultiple();
> -    
> +
>      /**
>       * @return the description of the element.
>       */
>      String getDescription();
> -    
> +
>      /**
>       * @return if the element value can be edited.
>       */
>      boolean isEditable();
> +
> +    /**
> +     * Copy all values if the meta data are copied.
> +     */
> +    int ONCOPY_COPY = 0;
> +    
> +    /**
> +     * Don't copy the values of this element if the meta data are copied.
> +     */
> +    int ONCOPY_IGNORE = 1;
> +
> +    /**
> +     * Delete all values of this element if the meta data are copied.
> +     */
> +    int ONCOPY_DELETE = 2;
> +
> +    /**
> +     * @return The action to be taken when meta data are copied from one 
> owner to another.
> +     */
> +    int getActionOnCopy();
>  
>  }
> 
> Modified: 
> lenya/trunk/src/modules-core/workflow-impl/config/cocoon-xconf/workflow-metadata.xconf
> URL: 
> http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow-impl/config/cocoon-xconf/workflow-metadata.xconf?view=diff&rev=447411&r1=447410&r2=447411
> ==============================================================================
> --- 
> lenya/trunk/src/modules-core/workflow-impl/config/cocoon-xconf/workflow-metadata.xconf
>  (original)
> +++ 
> lenya/trunk/src/modules-core/workflow-impl/config/cocoon-xconf/workflow-metadata.xconf
>  Mon Sep 18 07:30:28 2006
> @@ -24,7 +24,7 @@
>      unless="/cocoon/meta-data/[EMAIL PROTECTED] = 
> 'http://apache.org/lenya/metadata/workflow/1.0']">
>      <component-instance name="http://apache.org/lenya/metadata/workflow/1.0";
>        class="org.apache.lenya.cms.metadata.ConfigurableElementSet">
> -      <element name="workflowVersion" multiple="true"/>
> +      <element name="workflowVersion" multiple="true" onCopy="delete"/>
>      </component-instance>
>    </xconf>
>    
> 
> Modified: 
> lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeMetaData.java
> URL: 
> http://svn.apache.org/viewvc/lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeMetaData.java?view=diff&rev=447411&r1=447410&r2=447411
> ==============================================================================
> --- 
> lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeMetaData.java
>  (original)
> +++ 
> lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeMetaData.java
>  Mon Sep 18 07:30:28 2006
> @@ -52,7 +52,8 @@
>      public ElementSet getElementSet() {
>          if (this.elementSet == null) {
>              try {
> -                MetaDataRegistry registry = (MetaDataRegistry) 
> this.manager.lookup(MetaDataRegistry.ROLE);
> +                MetaDataRegistry registry = (MetaDataRegistry) this.manager
> +                        .lookup(MetaDataRegistry.ROLE);
>                  this.elementSet = registry.getElementSet(this.namespaceUri);
>              } catch (Exception e) {
>                  throw new RuntimeException(e);
> @@ -113,11 +114,17 @@
>      public void replaceBy(MetaData other) throws MetaDataException {
>          Element[] elements = getElementSet().getElements();
>          for (int i = 0; i < elements.length; i++) {
> -            String key = elements[i].getName();
> -            String[] values = other.getValues(key);
> -            removeAllValues(key);
> -            for (int j = 0; j < values.length; j++) {
> -                addValue(key, values[j]);
> +            if (elements[i].getActionOnCopy() == Element.ONCOPY_COPY) {
> +                String key = elements[i].getName();
> +                removeAllValues(key);
> +                String[] values = other.getValues(key);
> +                for (int j = 0; j < values.length; j++) {
> +                    addValue(key, values[j]);
> +                }
> +            }
> +            else if (elements[i].getActionOnCopy() == Element.ONCOPY_DELETE) 
> {
> +                String key = elements[i].getName();
> +                removeAllValues(key);
>              }
>          }
>      }
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to