///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2018 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:          http_ntaforum_org_2011_activation.ttcn
//  Description:
//  References:
//  Rev:           R2B
//  Prodnr:        CNL 113 776
//  Updated:       Sun Jan  6 13:17:58 2013
//  Contact:       http://ttcn.ericsson.se
//
////////////////////////////////////////////////////////////////////////////////
//
//	Generated from file(s):
//
//	- activation.xsd
//			/* xml version = "1.0" encoding = "UTF-8" */
//			/* targetnamespace = "http://ntaforum.org/2011/activation" */
//
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//
//
//NTAF-0001: Tool Registration, Discovery and Activation
//
//
////////////////////////////////////////////////////////////////////////////////


module http_ntaforum_org_2011_activation {


import from XSD all;


import from http_ntaforum_org_2011_harness all;


type record Activate
{
  XSD.String requestId optional,
  XSD.String toolId,
  ActivationResult result optional, //not optional in the schema -see Errata2TS001
  XSD.String message_ optional,
  XSD.String jid optional,
  XSD.String activationRef optional,
  XSD.DateTime timestamp optional,
  record length(1 .. infinity) of Harness harness_list
}
with {
  variant "name as uncapitalized";
  variant "element";
  variant (requestId) "attribute";
  variant (toolId) "attribute";
  variant (message_) "name as 'message'";
  variant (harness_list) "untagged";
  variant (harness_list[-]) "namespace as 'http://ntaforum.org/2011/harness' prefix 'h'";
};


type enumerated ActivationResult
{
  fail_,
  pass_,
  pending
}
with {
  variant "text 'fail_' as 'fail'";
  variant "text 'pass_' as 'pass'";
  variant "name as uncapitalized";
};


type record Deactivate
{
  XSD.String activationRef
}
with {
  variant "name as uncapitalized";
  variant "element";
};


}
with {
  encode "XML";
  variant "namespace as 'http://ntaforum.org/2011/activation' prefix 'a'";
  variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
  variant "elementFormQualified";
}
