<?xml version="1.0"?>
<!--
  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.
-->

<!-- $Id: generic.xsp 155806 2005-03-01 17:55:42Z andreas $ -->

<xsp:page 
    language="java" 
    xmlns:xsp="http://apache.org/xsp"
    xmlns:xsp-request="http://apache.org/xsp/request/2.0"
    xmlns:input="http://apache.org/cocoon/xsp/input/1.0"
    xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
    xmlns:wf="http://apache.org/cocoon/lenya/workflow/1.0"
    xmlns:uc="http://apache.org/cocoon/lenya/usecase/1.0"
    xmlns="http://apache.org/cocoon/lenya/menubar/1.0"
>

  <xsp:structure>
    <xsp:include>org.apache.lenya.cms.publication.Document</xsp:include>
  </xsp:structure>
  
  <menu>
    <menus>
      <menu i18n:attr="name" name="File">
        <block areas="site authoring" id="create">
          <item uc:usecase="sitemanagement.create" href="?doctype=news">
            <i18n:translate>
              <i18n:text>New ... Document</i18n:text>
              <i18n:param><i18n:text>resourceType-news</i18n:text></i18n:param>
            </i18n:translate>
          </item>
        </block>
      </menu>
      
      <menu i18n:attr="name" name="Edit">
        <xsp:logic>
          try {
              Object doc = <input:get-attribute module="page-envelope" as="object" name="document"/>;
              if (doc instanceof Document &amp;&amp; ((Document) doc).exists()) {
                  String doctype = <input:get-attribute module="page-envelope" as="string" name="document-type"/>;
                  if ("news".equals(doctype)) {
                      <block areas="authoring">
                        <item uc:usecase="news.edit" href="?"><i18n:text>news-settings</i18n:text></item>
                      </block>
                  }
              }
          }
          catch (Exception e) {
              throw new ProcessingException("Error during menu generation: ", e);
          }
        </xsp:logic>
      </menu>
      
    </menus>
  </menu>
  
</xsp:page>
