#pragma once
#include "svc_scriptobji.h"
// derive from this one
class svc_scriptObjectI : public svc_scriptObject {
public:
  virtual ScriptObjectController *getController(int n)=0;
  virtual void onRegisterClasses(ScriptObjectController *rootController) {};

protected:
  RECVS_DISPATCH;
};

template <class T>
class ScriptObjectControllerCreator : public svc_scriptObjectI {
public:
  static const char *getServiceName() { return "ScriptObjectControllerCreator"; }

  ScriptObjectControllerCreator() 
	{
  }

  virtual ~ScriptObjectControllerCreator() 
	{
  }

  virtual ScriptObjectController *getController(int n) 
	{
    if (n == 0) return &single_controller;
    return NULL;
  }

private:
  T single_controller;
};

#include <api/service/servicei.h>
template <class T>
class ScriptObjectCreator : public waServiceFactoryTSingle<svc_scriptObject, T> {};

#include <api/service/svc_enum.h>

class ExternalScriptObjectEnum : public SvcEnumT<svc_scriptObject> {
public:
  ExternalScriptObjectEnum() { }

protected:
  virtual int testService(svc_scriptObject*svc) {
    return (svc->getController(0) != NULL);
  }
};