Package org.cipango.sipapp

Examples of org.cipango.sipapp.SipAppContext$Context


     * </ul>
     */
    public static void execute(final String uri, final Evaluator evaluator) {
        try {
            String documentURI = getCanonicalURI(uri);
            Context rootCtx = evaluator.newContext(null);
            Tracer trc = new Tracer();
            SCXML doc = SCXMLReader.read(new URL(documentURI));
            if (doc == null) {
                System.err.println("The SCXML document " + uri
                        + " can not be parsed!");
                System.exit(-1);
            }
            System.out.println(SCXMLWriter.write(doc));
            SCXMLExecutor exec = new SCXMLExecutor(evaluator, null, trc);
            EventDispatcher ed = new SimpleScheduler(exec);
            exec.setEventdispatcher(ed);
            exec.setStateMachine(doc);
            exec.addListener(doc, trc);
            exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
            exec.setRootContext(rootCtx);
            exec.go();
            BufferedReader br = new BufferedReader(new
                InputStreamReader(System.in));
            String event;
            while ((event = br.readLine()) != null) {
                event = event.trim();
                if (event.equalsIgnoreCase("help") || event.equals("?")) {
                    System.out.println("Enter a space-separated list of "
                        + "events");
                    System.out.println("To populate a variable in the "
                        + "current context, type \"name=value\"");
                    System.out.println("To quit, enter \"quit\"");
                    System.out.println("To reset state machine, enter "
                        + "\"reset\"");
                } else if (event.equalsIgnoreCase("quit")) {
                    break;
                } else if (event.equalsIgnoreCase("reset")) {
                    exec.reset();
                } else if (event.indexOf('=') != -1) {
                    int marker = event.indexOf('=');
                    String name = event.substring(0, marker);
                    String value = event.substring(marker + 1);
                    rootCtx.setLocal(name, value);
                    System.out.println("Set variable " + name + " to "
                        + value);
                } else if (event == null || event.trim().length() == 0
                           || event.equalsIgnoreCase("null")) {
                    TriggerEvent[] evts = {new TriggerEvent(null,
View Full Code Here


        else if (!transition.isNoEventsTransition()) {
            return false;
        }
        if (transition.getCond() != null) {
            Boolean result = Boolean.FALSE;
            Context context = exctx.getScInstance().getContext(transition.getParent());
            context.setLocal(Context.NAMESPACES_KEY, transition.getNamespaces());
            try {
                if ((result = exctx.getEvaluator().evalCond(context, transition.getCond())) == null) {
                    result = Boolean.FALSE;
                    if (exctx.getAppLog().isDebugEnabled()) {
                        exctx.getAppLog().debug("Treating as false because the cond expression was evaluated as null: '"
                                + transition.getCond() + "'");
                    }
                }
            }
            catch (SCXMLExpressionException e) {
                exctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
                exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, "Treating as false due to error: "
                        + e.getMessage(), transition);
            }
            finally {
                context.setLocal(Context.NAMESPACES_KEY, null);
            }
            return result;
        }
        return true;
    }
View Full Code Here

     * @param scInstance the state machine instance holding the system context
     * @param event The event being stored
     * @param internal Flag indicating the event was received internally or externally
     */
    public void setSystemEventVariable(final SCInstance scInstance, final TriggerEvent event, boolean internal) {
        Context systemContext = scInstance.getSystemContext();
        EventVariable eventVar = null;
        if (event != null) {
            String eventType = internal ? EventVariable.TYPE_INTERNAL : EventVariable.TYPE_EXTERNAL;

            final int triggerEventType = event.getType();
            if (triggerEventType == TriggerEvent.ERROR_EVENT || triggerEventType == TriggerEvent.CHANGE_EVENT) {
                eventType = EventVariable.TYPE_PLATFORM;
            }

            // TODO: determine sendid, origin, originType and invokeid based on context later.
            eventVar = new EventVariable(event.getName(), eventType, null, null, null, null, event.getPayload());
        }
        systemContext.setLocal(SCXMLSystemContext.EVENT_KEY, eventVar);
    }
View Full Code Here

        Evaluator eval = exctx.getEvaluator();
        for (TransitionalState ts : statesToInvoke) {
            if (ts.getInvokes().isEmpty()) {
                continue;
            }
            Context context = scInstance.getContext(ts);
            for (Invoke i : ts.getInvokes()) {
                String src = i.getSrc();
                if (src == null) {
                    String srcexpr = i.getSrcexpr();
                    Object srcObj;
                    try {
                        context.setLocal(Context.NAMESPACES_KEY, i.getNamespaces());
                        srcObj = eval.eval(context, srcexpr);
                        context.setLocal(Context.NAMESPACES_KEY, null);
                        src = String.valueOf(srcObj);
                    } catch (SCXMLExpressionException see) {
                        exctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
                        exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, see.getMessage(), i);
                    }
                }
                String source = src;
                PathResolver pr = i.getPathResolver();
                if (pr != null) {
                    source = i.getPathResolver().resolvePath(src);
                }
                Invoker inv;
                try {
                    inv = exctx.newInvoker(i.getType());
                } catch (InvokerException ie) {
                    exctx.getInternalIOProcessor().addEvent(new TriggerEvent("failed.invoke."+ts.getId(), TriggerEvent.ERROR_EVENT));
                    continue;
                }
                List<Param> params = i.params();
                Map<String, Object> args = new HashMap<String, Object>();
                for (Param p : params) {
                    String argExpr = p.getExpr();
                    Object argValue = null;
                    context.setLocal(Context.NAMESPACES_KEY, p.getNamespaces());
                    // Do we have an "expr" attribute?
                    if (argExpr != null && argExpr.trim().length() > 0) {
                        try {
                            argValue = eval.eval(context, argExpr);
                        } catch (SCXMLExpressionException see) {
                            exctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
                            exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, see.getMessage(), i);
                        }
                    } else {
                        // No. Does value of "name" attribute refer to a valid
                        // location in the data model?
                        try {
                            argValue = eval.evalLocation(context, p.getName());
                            if (argValue == null) {
                                // Generate error, 4.3.1 in WD-scxml-20080516
                                exctx.getInternalIOProcessor().addEvent(new TriggerEvent(ts.getId() + ERR_ILLEGAL_ALLOC, TriggerEvent.ERROR_EVENT));
                            }
                        } catch (SCXMLExpressionException see) {
                            exctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
                            exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, see.getMessage(), i);
                        }
                    }
                    context.setLocal(Context.NAMESPACES_KEY, null);
                    args.put(p.getName(), argValue);
                }
                String invokeId = exctx.setInvoker(i, inv);
                inv.setInvokeId(invokeId);
                inv.setParentIOProcessor(exctx.getExternalIOProcessor());
View Full Code Here

                  {
                      ContextHandler c=(ContextHandler)installed[i];
                     
                      if (c instanceof SipAppContext)
                      {
                        SipAppContext sipAppContext = (SipAppContext) c;
                        if (context.equals(sipAppContext.getContextPath()))
                           continue files;
                      }
                     
                      if (context.equals(c.getContextPath()))
                          continue files;
                     
                      if (c.getBaseResource()!=null && c.getBaseResource().getFile().getAbsolutePath().equals(app.getFile().getAbsolutePath()))
                          continue files;         
                  }
              }
 
              // create a sipapp
              SipAppContext sac = null;
              if (getContexts() instanceof ContextHandlerCollection &&
                  SipAppContext.class.isAssignableFrom(((ContextHandlerCollection) getContexts()).getContextClass()))
              {
                  try
                  {
                      sac =(SipAppContext)((ContextHandlerCollection) getContexts()).getContextClass().newInstance();
                  }
                  catch (Exception e)
                  {
                      throw new Error(e);
                  }
              } else
              {
                  sac = new SipAppContext();
              }
             
              // configure it
              sac.setContextPath(context);
              if (getConfigurationClasses() != null)
                  sac.setConfigurationClasses(getConfigurationClasses());
             
              if (getDefaultsDescriptor() != null)
                  sac.setDefaultsDescriptor(getDefaultsDescriptor());
             
              if (getDefaultsSipDescriptor() != null)
                sac.setDefaultsSipDescriptor(getDefaultsSipDescriptor());
             
              sac.setExtractWAR(isExtract());
              sac.setWar(app.toString());
              sac.setParentLoaderPriority(isParentLoaderPriority());
             
              // add it
              getContexts().addHandler(sac);
              _deployed.add(sac);
             
              if (getContexts().isStarted())
                  sac.start();
          }
          catch (Throwable e)
          {
            mex.add(e);
      }
View Full Code Here

        if (context.endsWith("/") && context.length() > 0)
        {
            context = context.substring(0,context.length() - 1);
        }

        SipAppContext sac = new SipAppContext();
        sac.setContextPath(context);
        sac.setWar(file.getAbsolutePath());
        if (getDefaultsDescriptor() != null)
            sac.setDefaultsDescriptor(getDefaultsDescriptor());
        if (getDefaultsSipDescriptor() != null)
            sac.setDefaultsSipDescriptor(getDefaultsSipDescriptor());
        sac.setExtractWAR(isExtractWars());
        sac.setParentLoaderPriority(isParentLoaderPriority());
        if (getConfigurationClasses() != null)
        {
            sac.setConfigurationClasses(getConfigurationClasses());
        }

        if (getTempDir() != null)
        {
            /* Since the Temp Dir is really a context base temp directory,
             * Lets set the Temp Directory in a way similar to how WebInfConfiguration does it,
             * instead of setting the
             * WebAppContext.setTempDirectory(File). 
             * If we used .setTempDirectory(File) all webapps will wind up in the
             * same temp / work directory, overwriting each others work.
             */
            sac.setAttribute(WebAppContext.BASETEMPDIR, getTempDir());
        }
        return sac;
    }
View Full Code Here

    System.setProperty("org.eclipse.jetty.xml.XmlParser.Validating", "false");
   
    SipDescriptor descriptor = new SipDescriptor(getResource("/org/cipango/xml/sip-xsd.xml"));
    descriptor.parse();
    StandardDescriptorProcessor processor = new StandardDescriptorProcessor();
    processor.process(new SipAppContext(), descriptor);
  }
View Full Code Here

  @Test
  public void testSipXml10() throws Exception
  {
    //System.setProperty("org.eclipse.jetty.xml.XmlParser.Validating", "false");
   
    SipAppContext context = new SipAppContext();
    SipMetaData metaData = context.getSipMetaData();
    metaData.setSipXml(getResource("/org/cipango/xml/sip-sample-1.0.xml"));
    metaData.addDescriptorProcessor(new StandardDescriptorProcessor());
    metaData.resolve(context);

    SipServletHandler servletHandler = (SipServletHandler) context.getServletHandler();
   
    assertEquals(SipAppContext.VERSION_10, context.getSpecVersion());
    assertEquals("SIP Servlet based Registrar", context.getDisplayName());
   
    Enumeration<String> e = context.getInitParameterNames();
    String name = (String) e.nextElement();
    assertEquals("contextConfigLocation", name);
    assertEquals("/WEB-INF/kaleo.xml", context.getInitParameter(name));
    assertFalse(e.hasMoreElements())
   
    assertEquals(TestListener.class, context.getTimerListeners()[0].getClass());
 
    // servlets
    SipServletHolder[] holders = servletHandler.getSipServlets();
    assertEquals(2, holders.length);
   
    assertEquals("main", holders[0].getName());
    // TODO assertEquals("PBX Servlet", holders[0].getDisplayName());
    assertEquals("org.cipango.kaleo.PbxServlet", holders[0].getClassName());
    e = holders[0].getInitParameterNames();
    name = (String) e.nextElement();
    assertEquals("value", holders[0].getInitParameter(name));
    assertFalse(e.hasMoreElements())
    assertEquals(10, holders[0].getInitOrder());
   
    assertEquals("presence", holders[1].getName());
    assertEquals("org.cipango.kaleo.presence.PresenceServlet", holders[1].getClassName());
    assertFalse(holders[1].getInitParameterNames().hasMoreElements())
    assertEquals(0, holders[1].getInitOrder());
   
    // servlet-mapping
    SipServletMapping[] mappings = servletHandler.getSipServletMappings();
    assertEquals(1, mappings.length);
    assertEquals("main", mappings[0].getServletName());
    assertEquals("((request.method == REGISTER) or (request.method == PUBLISH) or (request.method == SUBSCRIBE) or (request.method == INVITE))",
        mappings[0].getMatchingRuleExpression());
    assertEquals(60, context.getSessionTimeout());
   
    assertNull(servletHandler.getMainServlet());
  }
View Full Code Here

 
  @SuppressWarnings("unchecked")
  @Test
  public void testSipXml11() throws Exception
  {
    SipAppContext context = new SipAppContext();
    SipMetaData metaData = context.getSipMetaData();
    metaData.setSipXml(getResource("/org/cipango/xml/sip-sample-1.1.xml"));
    metaData.addDescriptorProcessor(new StandardDescriptorProcessor());
    metaData.resolve(context);
   
    assertEquals(SipAppContext.VERSION_11, context.getSpecVersion());
    assertEquals("SIP Servlet based Registrar", context.getDisplayName());
   
    Enumeration<String> e = context.getInitParameterNames();
    String name = (String) e.nextElement();
    assertEquals("contextConfigLocation", name);
    assertEquals("/WEB-INF/kaleo.xml", context.getInitParameter(name));
    assertFalse(e.hasMoreElements())
   
    assertEquals(TestListener.class, context.getTimerListeners()[0].getClass());
 
    // servlets
    SipServletHandler servletHandler = (SipServletHandler) context.getServletHandler();
    SipServletHolder[] holders = servletHandler.getSipServlets();
    assertEquals(2, holders.length);
   
    assertEquals("main", holders[0].getName());
    // TODO assertEquals("PBX Servlet", holders[0].getDisplayName());
    assertEquals("org.cipango.kaleo.PbxServlet", holders[0].getClassName());
    e = holders[0].getInitParameterNames();
    name = (String) e.nextElement();
    assertEquals("value", holders[0].getInitParameter(name));
    assertFalse(e.hasMoreElements())
    assertEquals(10, holders[0].getInitOrder());
   
    assertEquals("presence", holders[1].getName());
    assertEquals("org.cipango.kaleo.presence.PresenceServlet", holders[1].getClassName());
    assertFalse(holders[1].getInitParameterNames().hasMoreElements())
    assertEquals(0, holders[1].getInitOrder());
   
    // servlet-mapping
    SipServletMapping[] mappings = servletHandler.getSipServletMappings();
    assertNull(mappings);
    assertEquals(60, context.getSessionTimeout());
   
    assertNotNull(servletHandler.getMainServlet());
    assertEquals("main", servletHandler.getMainServlet().getName());
    assertEquals("org.cipango.kaleo", context.getName());
  }
View Full Code Here

  }

  @Test
  public void testMappings11() throws Exception
  {
    SipAppContext context = new SipAppContext();
    SipMetaData metaData = context.getSipMetaData();
    metaData.setSipXml(getResource("/org/cipango/xml/sip-mappings-1.1.xml"));
    metaData.addDescriptorProcessor(new StandardDescriptorProcessor());
    metaData.resolve(context);
       
    assertEquals(SipAppContext.VERSION_11, context.getSpecVersion());
   
    SipServletHandler servletHandler = (SipServletHandler) context.getServletHandler();
    SipServletMapping[] mappings = servletHandler.getSipServletMappings();
    assertEquals(2, mappings.length);
  }
View Full Code Here

TOP

Related Classes of org.cipango.sipapp.SipAppContext$Context

Copyright © 2018 www.massapicom. 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.