/*
 * Copyright (C) 2007 Helge Hess
 *
 * This file is part of JOPE.
 *
 * JOPE is free software; you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2, or (at your option) any later version.
 *
 * JOPE is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with JOPE; see the file COPYING. If not, write to the Free Software
 * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
package org.opengroupware.jope.jsapp;

import java.io.File;

import org.opengroupware.jope.appserver.core.WOContext;
import org.opengroupware.jope.appserver.publisher.IJoCallable;
import org.opengroupware.jope.appserver.publisher.IJoContext;
import org.opengroupware.jope.foundation.NSException;

public class JSJoDirectAction extends JSJoObject implements IJoCallable {

  File actionFile;
  
  public JSJoDirectAction
    (Object _container, String _nameInContainer, File _file, WOContext _ctx)
  {
    super(_container, _nameInContainer, _ctx);
    this.actionFile = _file;
  }
  
  /* IJoObject */
  
  public Object lookupName(String _name, IJoContext _ctx, boolean _acquire) {
    System.err.println("TBD: JS DA lookup" + _name + ": " + this.actionFile);
    // TBD: we should probably return null an process the PATH_INFO on our own
    return null;
  }

  /* IJoCallable */

  public Object callInContext(Object _object, IJoContext _ctx) {
    // TBD: parse JS and invoke Action function
    
    Object defaultMethod = this.lookupName("default", _ctx, false);
    if (defaultMethod == null)
      return new NSException("did not find default method");
    
    return ((IJoCallable)defaultMethod).callInContext(_object, _ctx);
  }

  public boolean isCallableInContext(IJoContext _ctx) {
    return true; // ctx instanceof WOContext?
  }
}
