You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
8.9 KiB

//==================================================
//
// Copyright 2017 Siemens Product Lifecycle Management Software Inc. All Rights Reserved.
//
//==================================================
using System;
using System.Collections;
using System.Net;
using Teamcenter.Schemas.Soa._2006_03.Exceptions;
using Teamcenter.Services.Strong.Core;
using Teamcenter.Services.Strong.Core._2006_03.Session;
using Teamcenter.Soa;
using Teamcenter.Soa.Client;
using Teamcenter.Soa.Client.Model;
using Teamcenter.Soa.Exceptions;
using WorkspaceObject = Teamcenter.Soa.Client.Model.Strong.WorkspaceObject;
using User = Teamcenter.Soa.Client.Model.Strong.User;
using KPlan.Util;
namespace Teamcenter.ClientX
{
public class Session
{
/**
* Single instance of the Connection object that is shared throughtout
* the application. This Connection object is needed whenever a Service
* stub is instantiated.
*/
private static Connection connection;
/**
* The credentialManager is used both by the Session class and the Teamcenter
* Services Framework to get user credentials.
*
*/
private static AppXCredentialManager credentialManager;
/**
* Create an instance of the Session with a connection to the specified
* server.
*
* Add implementations of the ExceptionHandler, PartialErrorListener,
* ChangeListener, and DeleteListeners.
*
* @param host Address of the host to connect to, http://serverName:port/tc
*/
public Session(String host)
{
// Create an instance of the CredentialManager, this is used
// by the SOA Framework to get the user's credentials when
// challanged by the server (sesioin timeout on the web tier).
credentialManager = new AppXCredentialManager();
string proto = null;
string envNameTccs = null;
if (host.StartsWith("http"))
{
proto = SoaConstants.HTTP;
}
else if (host.StartsWith("tccs"))
{
proto = SoaConstants.TCCS;
int envNameStart = host.IndexOf('/') + 2;
envNameTccs = host.Substring(envNameStart, host.Length - envNameStart);
}
// Create the Connection object, no contact is made with the server
// until a service request is made
connection = new Connection(host, new System.Net.CookieCollection(), credentialManager, SoaConstants.REST, proto, false);
if (proto == SoaConstants.TCCS)
connection.SetOption(Connection.TCCS_ENV_NAME, envNameTccs);
// Add an ExceptionHandler to the Connection, this will handle any
// InternalServerException, communication errors, xml marshalling errors
// .etc
connection.ExceptionHandler = new AppXExceptionHandler();
// While the above ExceptionHandler is required, all of the following
// Listeners are optional. Client application can add as many or as few Listeners
// of each type that they want.
// Add a Partial Error Listener, this will be notified when ever a
// a service returns partial errors.
connection.ModelManager.AddPartialErrorListener(new AppXPartialErrorListener());
// Add a Change and Delete Listener, this will be notified when ever a
// a service returns model objects that have been updated or deleted.
connection.ModelManager.AddModelEventListener(new AppXModelEventListener());
// Add a Request Listener, this will be notified before and after each
// service request is sent to the server.
Connection.AddRequestListener(new AppXRequestListener());
}
/**
* Get the single Connection object for the application
*
* @return connection
*/
public static Connection getConnection()
{
return connection;
}
public User Login2(string username, string password, string usergroup, string userrole) {
// Get the service stub
SessionService sessionService = SessionService.getService(connection);
LoginResponse resp = sessionService.Login(username, password, usergroup, userrole, "", "");
TCUtil.ThrowServiceDataError(resp.ServiceData);
//LoginResponse resp = sessionService.Login(username, password, usergroup, userrole, "", "");
return resp.User;
}
/**
* Login to the Teamcenter Server
*
*/
public User login()
{
// Get the service stub
SessionService sessionService = SessionService.getService(connection);
try
{
// Prompt for credentials until they are right, or until user
// cancels
String[] credentials = credentialManager.PromptForCredentials();
while (true)
{
try
{
// *****************************
// Execute the service operation
// *****************************
LoginResponse resp = sessionService.Login(credentials[0], credentials[1],
credentials[2], credentials[3],"",credentials[4]);
return resp.User;
}
catch (InvalidCredentialsException e)
{
credentials = credentialManager.GetCredentials(e);
}
}
}
// User canceled the operation, don't need to tell him again
catch (CanceledOperationException /*e*/) {}
// Exit the application
//System.exit(0);
return null;
}
/**
* Terminate the session with the Teamcenter Server
*
*/
public void logout()
{
// Get the service stub
SessionService sessionService = SessionService.getService(connection);
try
{
// *****************************
// Execute the service operation
// *****************************
sessionService.Logout();
}
catch (ServiceException /*e*/) { }
}
/**
* Print some basic information for a list of objects
*
* @param objects
*/
public static void printObjects(ModelObject[] objects)
{
if(objects == null)
return;
// Ensure that the referenced User objects that we will use below are loaded
getUsers( objects );
Console.WriteLine("Name\t\tOwner\t\tLast Modified");
Console.WriteLine("====\t\t=====\t\t=============");
for (int i = 0; i < objects.Length; i++)
{
if(!(objects[i] is WorkspaceObject ))
continue;
WorkspaceObject wo = (WorkspaceObject)objects[i];
try
{
String name = wo.Object_string;
User owner = (User) wo.Owning_user;
DateTime lastModified =wo.Last_mod_date;
Console.WriteLine(name + "\t" + owner.User_name + "\t" + lastModified.ToString());
}
catch (NotLoadedException e)
{
// Print out a message, and skip to the next item in the folder
// Could do a DataManagementService.getProperties call at this point
Console.WriteLine(e.Message);
Console.WriteLine("The Object Property Policy ($TC_DATA/soa/policies/Default.xml) is not configured with this property.");
}
}
}
private static void getUsers(ModelObject[] objects)
{
if(objects == null)
return;
DataManagementService dmService = DataManagementService.getService(Session.getConnection());
ArrayList unKnownUsers = new ArrayList();
for (int i = 0; i < objects.Length; i++)
{
if(!(objects[i] is WorkspaceObject ))
continue;
WorkspaceObject wo = (WorkspaceObject)objects[i];
User owner = null;
try
{
owner = (User) wo.Owning_user;
String userName = owner.User_name;
}
catch (NotLoadedException /*e*/)
{
if(owner != null)
unKnownUsers.Add(owner);
}
}
User[] users = new User[unKnownUsers.Count];
unKnownUsers.CopyTo( users );
String[] attributes = { "user_name" };
// *****************************
// Execute the service operation
// *****************************
dmService.GetProperties(users, attributes);
}
}
}