Package org.infoglue.deliver.applications.actions

Source Code of org.infoglue.deliver.applications.actions.ViewApplicationSettingsAction

/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
*  Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/

package org.infoglue.deliver.applications.actions;

import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.deliver.applications.databeans.DatabaseWrapper;
import org.infoglue.deliver.controllers.kernel.impl.simple.BasicTemplateController;
import org.infoglue.deliver.controllers.kernel.impl.simple.ComponentLogic;
import org.infoglue.deliver.controllers.kernel.impl.simple.ExtranetController;
import org.infoglue.deliver.controllers.kernel.impl.simple.IntegrationDeliveryController;
import org.infoglue.deliver.controllers.kernel.impl.simple.NodeDeliveryController;
import org.infoglue.deliver.controllers.kernel.impl.simple.TemplateController;

/**
* This is the action that can supply a caller with a lot of information about the delivery-engine.
*
* @author Mattias Bogeblad
*/

public class ViewApplicationSettingsAction extends ViewPageAction //WebworkAbstractAction
{
    private final static Logger logger = Logger.getLogger(ViewApplicationSettingsAction.class.getName());

  //Used to get a list of all available mthods
  private List templateMethods = new ArrayList();

  //Used to get the navigation title of a page
  private String navigationTitle = null;
  private String sourceId = null;
  private String className = null;

    private static final String ENCODING = "UTF-8";

  /**
   * The constructor for this action - contains nothing right now.
   */
   
    public ViewApplicationSettingsAction()
    {
    }
   
    /**
     * This method is the application entry-point. The parameters has been set through the setters
     * and now we just have to render the appropriate output.
     */
        
    public String doExecute() throws Exception
    {
    return NONE;
    }

    protected String out(String string) throws IOException
    {
    getResponse().setContentType("text/xml; charset=" + ENCODING);
    PrintWriter out = getResponse().getWriter();
    out.println(string);
    return null;
    }
   
    private String q(String s)
    {
        return "\"" + s + "\"";
    }
   
    private String createMethodElement(Method m)
    {
        String args = "";
        Class[] params = m.getParameterTypes();
        for(int i=0; i<params.length; i++)
        {
            if(i!=0) args+=", ";
            args += params[i].getName();
        }
       
        return "<method name=" + q(m.getName()) + " returnType=" + q(m.getReturnType().getName()) + " args=" + q(args) + "/>";
    }
   
  public String doGetClassMethods() throws Exception
  {
      StringBuffer document = new StringBuffer();
    try
    {
        Class cls = null;
        if(className==null || className.equals("$templateLogic"))
            cls = BasicTemplateController.class;
        else if(className.equals("$componentLogic"))
            cls = ComponentLogic.class;
        else
            cls = Class.forName(className);
       
        if(cls==null) return out("<methods class=\"null\" package=\"null\"/>");
       
        document.append("<methods class=" +  q(cls.getName()) + " package=" + q(cls.getPackage().getName()) + ">");
            Method m[] = cls.getDeclaredMethods();
            for (int i = 0; i < m.length; i++)
            {
              Method method = m[i];
              if(Modifier.isPublic(method.getModifiers()))
              {
                  document.append(createMethodElement(method));
              }
            }
        document.append("</methods>");
        }
        catch (Throwable e)
        {
            System.err.println(e);
            return out("<methods class=\"null\" package=\"null\"/>");
        }

    return out(document.toString());
  }
   
   
  /**
   * This command is used to get a list of all available methods on the templateController.
   * This service is mostly used by the template-editor so it can keep up with changes easily.
   * @deprecated
   */
 
  public String doGetTemplateLogicMethods() throws Exception
  {
    try
    {
            Method m[] = BasicTemplateController.class.getDeclaredMethods();
            for (int i = 0; i < m.length; i++)
            {
              Method method = m[i];
              if(!method.getName().startsWith("set"))
              {
                StringBuffer sb = new StringBuffer();
                sb.append(method.getName());
                sb.append("(");
                Class[] parameters = method.getParameterTypes();
                for (int j = 0; j < parameters.length; j++)
                   {
                     if(j != 0)
                     sb.append(", ");
                    
                   sb.append(parameters[j].getName())
                 }
                sb.append(")");
                  
                   String methodString = sb.toString();
                   int position = 0;
                   while(position < this.templateMethods.size())
                {
                  String currentString = (String)this.templateMethods.get(position);
                  if(currentString.compareToIgnoreCase(methodString) > 0)
                  {
                    break;
                  }
                  position++;
                }
               
                this.templateMethods.add(position, methodString);   
           
              }
            }
        }
        catch (Throwable e)
        {
            System.err.println(e);
        }
    return "templateMethods";
  }
 
  /**
   * This command is used to get the navigationtitle for a sitenode in a certain language.
   */
 
  public String doGetPageNavigationTitle() throws Exception
  {
      DatabaseWrapper dbWrapper = new DatabaseWrapper(CastorDatabaseService.getDatabase());
      //Database db = CastorDatabaseService.getDatabase();
   
    beginTransaction(dbWrapper.getDatabase());

    try
    {
        Principal principal = (Principal)this.getHttpSession().getAttribute("infogluePrincipal");
      if(principal == null)
      {
        try
        {
            Map arguments = new HashMap();
            arguments.put("j_username", CmsPropertyHandler.getAnonymousUser());
            arguments.put("j_password", CmsPropertyHandler.getAnonymousPassword());
           
            principal = ExtranetController.getController().getAuthenticatedPrincipal(arguments, getRequest());
        }
        catch(Exception e)
        {
            throw new SystemException("There was no anonymous user found in the system. There must be - add the user anonymous/anonymous and try again.", e);
        }
      }
     
      this.nodeDeliveryController           = NodeDeliveryController.getNodeDeliveryController(getSiteNodeId(), getLanguageId(), getContentId());
      this.integrationDeliveryController     = IntegrationDeliveryController.getIntegrationDeliveryController(getSiteNodeId(), getLanguageId(), getContentId());
      TemplateController templateController   = getTemplateController(dbWrapper, getSiteNodeId(), getLanguageId(), getContentId(), getRequest(), (InfoGluePrincipal)principal, false);
      this.navigationTitle = templateController.getPageNavTitle(this.getSiteNodeId());

      closeTransaction(dbWrapper.getDatabase());
    }
    catch(Exception e)
    {
      logger.error("An error occurred so we should not complete the transaction:" + e, e);
      rollbackTransaction(dbWrapper.getDatabase());
      throw new SystemException(e.getMessage());
    }

    return "navigationTitle";
  }
   
  public List getTemplateMethods()
  {
    return templateMethods;
  }

  public String getNavigationTitle()
  {
    return navigationTitle;
  }

  public String getSourceId()
  {
    return this.sourceId;
  }

  public void setSourceId(String sourceId)
  {
    this.sourceId = sourceId;
  }

    public String getClassName()
    {
        return className;
    }
    public void setClassName(String className)
    {
        this.className = className;
    }
}
TOP

Related Classes of org.infoglue.deliver.applications.actions.ViewApplicationSettingsAction

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.