<?xml version="1.0" encoding="iso-8859-1"?>

<!--
  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.
-->

<page>
    <content>
        <p>
            As already mentioned, our Java beans are dead simple and not very robust.
            The "database" is simply held in memory, loaded with simulated data at startup.
        </p>

        <h2>Interfaces</h2>
        <p>
            Here's the interface of the DatabaseFacade class, which is used by our
            Flowscript code to "talk" to the Java beans:
            <pre class="code">
/** access the Database */
public static DatabaseFacade getInstance();

/** get our list of tasks
 *  @return a List of TaskBean objects */
public List getTasks();

/** get a single TaskBean */
public TaskBean getTaskBeanById(int id) throws Exception;

/** get this object's version */
public String getVersion();
            </pre>
        </p>
        <p>
            Here's the interface of the TaskBean class, our main "task" object. It is basically a Java Bean
            with one read-only and three read-write properties.
            <pre class="code">
public int getId();
public String getTaskName();
public void setTaskName(String m_taskName);
public String getAssignedTo();
public void setAssignedTo(String m_assignedTo);

/** @return a List of TaskCommentBean objects */
public List getComments();

/** @param c a List of TaskCommentBean objects */
public void setComments(List c);
            </pre>
        </p>
        <p>
            Here's the TaskCommentBean interface:
            <pre class="code">
public int getId();
public Date getDate();
public void setDate(Date m_date);
public String getComment();
public void setComment(String m_comment);
            </pre>
        </p>

        <h2>Access from Flowscript</h2>
        <p>
            Here's a code excerpt showing how Flowscript code can access Java classes.
        </p>
        <pre class="code">
var db = Packages.org.apache.cocoon.samples.tour.beans.DatabaseFacade.getInstance();
...
list = db.getTasks();
        </pre>
        <p>
            Simple enough. The "official" way of accessing Java components in a Cocoon
            application would be to use the Avalon lookup mechanisms, but this wouldn't
            add much to our example so we took the easy way here.
        </p>
    </content>
</page>
