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
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|