Package de.iritgo.aktera.ui.listing

Source Code of de.iritgo.aktera.ui.listing.Listing

/**
* This file is part of the Iritgo/Aktera Framework.
*
* Copyright (C) 2005-2011 Iritgo Technologies.
* Copyright (C) 2003-2005 BueroByte GbR.
*
* Iritgo 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.
*/

package de.iritgo.aktera.ui.listing;


import de.iritgo.aktera.model.Model;
import de.iritgo.aktera.model.ModelException;
import de.iritgo.aktera.model.ModelRequest;
import de.iritgo.aktera.model.ModelResponse;
import de.iritgo.aktera.model.Output;
import de.iritgo.aktera.model.StandardLogEnabledModel;
import de.iritgo.aktera.tools.ModelTools;
import de.iritgo.simplelife.constants.SortOrder;
import de.iritgo.simplelife.math.NumberTools;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;


/**
* @avalon.component
* @avalon.service type="de.iritgo.aktera.model.Model"
* @x-avalon.info name="aktera.listing"
* @x-avalon.lifestyle type="singleton"
* @model.model name="aktera.listing" id="aktera.listing" logger="aktera"
*/
public class Listing extends StandardLogEnabledModel
{
  /**
   * Execute the model. Create a listing descriptor and return it in
   * an output element named "listing".
   *
   * @param req
   * The model request
   * @return The model response
   */
  public ModelResponse execute(ModelRequest req) throws ModelException
  {
    try
    {
      Configuration config = getConfiguration();
      java.util.List configPath = ModelTools.getDerivationPath(req, this);

      ModelResponse res = req.createResponse();
      ListingDescriptor listing = createListingFromConfig(config, configPath);
      Output output = res.createOutput("listing");

      output.setContent(listing);
      res.add(output);

      return res;
    }
    catch (ConfigurationException x)
    {
      throw new ModelException(x);
    }
  }

  /**
   * Create a listing descriptor from a listing model.
   *
   * @param req
   * The model request
   * @param modelName
   * The model name
   * @return The listing descriptor
   * @throws ModelException
   * in case of a failure
   */
  public static ListingDescriptor createListingFromModel(ModelRequest req, String modelName) throws ModelException
  {
    try
    {
      Model listingModel = (Model) req.getService(Model.ROLE, modelName);
      Output listingOutput = (Output) listingModel.execute(req).get("listing");

      if (listingOutput != null)
      {
        return (ListingDescriptor) listingOutput.getContent();
      }

      throw new ModelException("[Listing] Unable to find listing model '" + modelName + "'");
    }
    catch (Exception x)
    {
      throw new ModelException("Listing: Unable to create listing from model " + modelName + " (" + x + ")");
    }
  }

  /**
   * Create a listing descriptor from a configuration.
   *
   * @param configPath
   * TODO
   * @param modelName
   * The model name.
   *
   * @return The listing descriptor.
   * @throws ModelException
   * in case of a failure.
   * @throws ConfigurationException
   */
  public static ListingDescriptor createListingFromConfig(Configuration config, java.util.List configPath)
    throws ModelException, ConfigurationException
  {
    ListingDescriptor listing = new ListingDescriptor();

    listing.setBundle(ModelTools.getConfigString(configPath, "bundle", "Aktera"));
    listing.setHeader(ModelTools.getConfigString(configPath, "header", null));

    java.util.List<Configuration> keyConfigs = ModelTools.getConfigChildren(configPath, "key");

    for (Configuration keyConfig : keyConfigs)
    {
      listing.addIdColumn(keyConfig.getValue(keyConfig.getAttribute("value", keyConfig.getAttribute("name",
              keyConfig.getAttribute("column", null)))));
    }

    java.util.List<Configuration> columnsConfigs = ModelTools.getConfigChildren(configPath, "column");

    for (Configuration columnConfig : columnsConfigs)
    {
      String columnBundle = columnConfig.getAttribute("bundle", listing.getBundle());
      ColumnDescriptor column = listing.addColumn(columnConfig.getAttribute("name"), columnConfig.getAttribute(
              "label", null), columnBundle, columnConfig.getAttribute("viewer", "none"), columnConfig
              .getAttributeAsInteger("width", 0));

      column.setRename(columnConfig.getAttribute("rename", null));
      column.setVisible(NumberTools.toBool(columnConfig.getAttribute("visible", "true"), true));
      column.setSortable(NumberTools.toBool(columnConfig.getAttribute("sortable", "true"), true));
      column.setValue(columnConfig.getAttribute("value", null));
    }

    java.util.List<Configuration> sortConfigs = ModelTools.getConfigChildren(configPath, "sort");

    for (Configuration sortConfig : sortConfigs)
    {
      SortOrder sortOrder = SortOrder.ASCENDING;

      if ("desc".equals(sortConfig.getAttribute("order", null)))
      {
        sortOrder = SortOrder.DESCENDING;
      }

      String sortColumn = sortConfig.getAttribute("column", sortConfig.getAttribute("name", null));

      if (sortColumn == null)
      {
        sortColumn = sortConfig.getValue(sortConfig.getAttribute("name", null));
      }

      if (listing.getColumn(sortColumn) == null)
      {
        throw new ModelException("Unknown column '" + sortColumn + "' in sort tag for listing '"
                + config.getAttribute("id") + "'");
      }

      listing.setSortColumn(sortColumn, sortOrder);
    }

    return listing;
  }
}
TOP

Related Classes of de.iritgo.aktera.ui.listing.Listing

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.