<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- @version $Id$ -->
<mapping>
  <description>Mapping for Pluto related information like preferences</description>

  <class name="org.apache.cocoon.portal.pluto.om.common.PreferenceImpl">
    <field name="name" type="java.lang.String" required="true">
      <bind-xml name="name" node="element"/>
    </field>
    <field name="castorValues" type="java.lang.String"
           collection="collection" required="true">
      <bind-xml name="value" node="element"/>
    </field>
  </class>

  <class name="org.apache.cocoon.portal.pluto.om.common.PreferenceSetImpl">
    <field name="preferences"
           type="org.apache.cocoon.portal.pluto.om.common.PreferenceImpl"
           collection="set">
      <bind-xml name="preference" node="element"/>
    </field>
  </class>

</mapping>

