/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProToolkit.h>
#include <ProWorkspace.h>
#include <ProWTUtils.h>
#include <ProBrowser.h>
#include <ProUtil.h>
#include <ProWstring.h>
#include <ProCore.h>
#include <PTWCServer.h>
#define POPULATE_ALIAS L"_PTWC_Populate"
/*====================================================================*\
FUNCTION: PTWCPopulateServer
PURPOSE: Populate the ProjectLink project with models based on the
contents of the initialization file
\*====================================================================*/
int PTWCPopulateServer (char* init_file)
{
PTWCInitFileInfo file_data;
int i, num_workspaces;
wchar_t* context;
wchar_t* ws_name;
wchar_t* aliased_url;
ProServerWorkspaceData* workspaces;
ProServerCheckinOptions opts;
ProServerCheckinConflicts conflicts;
ProPath designs_path;
ProPath plans_path;
status = PTWCGetInitFileInfo (init_file, &file_data);
if (status == PRO_TK_NO_ERROR)
{
/*--------------------------------------------------------------------*\
Setup authentication
\*--------------------------------------------------------------------*/
status = ProBrowserAuthenticate (file_data.username, file_data.password);
PT_TEST_LOG_SUCC ("ProBrowserAuthenticate()");
/*--------------------------------------------------------------------*\
Register and activate the server. We find the workspace on the
given project (context) to use as the active workspace
\*--------------------------------------------------------------------*/
status = ProServerWorkspacesCollect (file_data.server_url, &workspaces);
PT_TEST_LOG_SUCC ("ProServerWorkspacesCollect()");
status = ProArraySizeGet (workspaces, &num_workspaces);
PT_TEST_LOG_SUCC ("ProArraySizeGet()");
for (i = 0; i < num_workspaces; i++)
{
int result = -1;
status = ProServerworkspacedataContextGet (workspaces [i], &context);
PT_TEST_LOG_SUCC ("ProServerworkspacedataContextGet()");
ProWstringCompare (context, file_data.project, PRO_VALUE_UNUSED, &result);
ProWstringFree (context);
if (result == 0)
{
status = ProServerworkspacedataNameGet (workspaces [i], &ws_name);
PT_TEST_LOG_SUCC ("ProServerworkspacedataNameGet()");
break;
}
}
ProServerworkspacedataProarrayFree (workspaces);
status = ProServerRegister (POPULATE_ALIAS, file_data.server_url, ws_name,
&aliased_url);
PT_TEST_LOG_SUCC ("ProServerRegister()");
status = ProServerActivate (POPULATE_ALIAS);
PT_TEST_LOG_SUCC ("ProServerActivate()");
/*--------------------------------------------------------------------*\
Import part and assembly models.
\*--------------------------------------------------------------------*/
if (file_data.design_models != NULL)
{
status = ProCurrentWorkspaceImport (PRO_WS_IMPEX_ALL,
file_data.design_models);
PT_TEST_LOG_SUCC ("ProCurrentWorkspaceImport()");
}
PTWCUtilBuildPJLFolder (POPULATE_ALIAS, file_data.project,
"Designs", designs_path);
/*--------------------------------------------------------------------*\
Prepare the checkin options; by default the imported parts
and assemblies go in the "Designs" folder.
\*--------------------------------------------------------------------*/
status = ProServercheckinoptsAlloc (&opts);
PT_TEST_LOG_SUCC ("ProServercheckinoptsAlloc()");
status = ProServercheckinoptsDeflocationSet (opts, designs_path);
PT_TEST_LOG_SUCC ("ProServercheckinoptsDeflocationSet()");
/*--------------------------------------------------------------------*\
Import drawing models.
\*--------------------------------------------------------------------*/
if (file_data.plan_models != NULL)
{
int num_drawings, i;
ProPath filepath;
ProMdlName name;
ProMdlExtension extension;
ProMdlFileName filename;
status = ProCurrentWorkspaceImport (PRO_WS_IMPEX_NONE,
file_data.plan_models);
PT_TEST_LOG_SUCC ("ProCurrentWorkspaceImport()");
/*--------------------------------------------------------------------*\
The imported drawings go in the "Plans" folder.
\*--------------------------------------------------------------------*/
PTWCUtilBuildPJLFolder (POPULATE_ALIAS, file_data.project,
"Plans", plans_path);
status = ProArraySizeGet (file_data.plan_models, &num_drawings);
PT_TEST_LOG_SUCC ("ProArraySizeGet()");
for (i = 0; i < num_drawings; i++)
{
/*--------------------------------------------------------------------*\
Each item is assigned to the checkin options using its
model name.
\*--------------------------------------------------------------------*/
ProWstringCopy (file_data.plan_models [i], filepath, PRO_VALUE_UNUSED);
status = ProFileMdlnameParse (filepath, NULL,
name, extension, NULL);
PT_TEST_LOG_SUCC ("ProFileMdlnameParse()");
ProWstringCopy (name, filename, PRO_VALUE_UNUSED);
ProWstringConcatenate (L".", filename, PRO_VALUE_UNUSED);
ProWstringConcatenate (extension, filename, PRO_VALUE_UNUSED);
status = ProServercheckinoptsLocationAdd (opts, filename, plans_path);
PT_TEST_LOG_SUCC ("ProServercheckinoptsLocationAdd()");
}
}
/*--------------------------------------------------------------------*\
Check in the entire workspace using the options.
\*--------------------------------------------------------------------*/
status = ProServerObjectsCheckin (NULL, opts, &conflicts);
PT_TEST_LOG_SUCC ("ProServerObjectsCheckin()");
if (status == PRO_TK_CHECKOUT_CONFLICT)
{
PTWCUtilConflictReport (conflicts);
ProServerconflictsFree (conflicts);
}
/*--------------------------------------------------------------------*\
Clean the workspace, and free allocated memory
\*--------------------------------------------------------------------*/
PTWCUtilRemoveAllFromWS (POPULATE_ALIAS, ws_name);
PTWCInitFileDataFree (&file_data);
ProWstringFree (ws_name);
}
/*--------------------------------------------------------------------*\
End the Pro/ENGINEER session
\*--------------------------------------------------------------------*/
PT_TEST_LOG_CLOSE
ProEngineerEnd ();
return (PRO_TK_NO_ERROR);
}