/**
* Create an XNAT project
* @param projectId
* @param projectTitle
* @param xnatUser
*/
static public XnatProjectdata createProject (final String projectId, final String projectTitle, final String projectDescription, final boolean disableAutoarchive, final boolean setPipelines, final UserI xnatUser) {
LogUtils.logDebug (XnatProjectUtils.class.getName() + ".createProject");
LogUtils.logDebug ("projectId = " + projectId);
LogUtils.logDebug ("projectTitle = " + projectTitle);
LogUtils.logDebug ("xnatUser = " + xnatUser.getLogin ());
if (!GeneralUtils.isAdminUser (xnatUser)) {
LogUtils.logString ("User [" + xnatUser.getLogin() + "] is not an XNAT administrator.");
return null;
}
XnatProjectdata xnatProject = XnatProjectdata.getProjectByIDorAlias (projectId, xnatUser, false);
if (xnatProject != null) {
LogUtils.logDebug ("Found project assignment of " + xnatProject.getProject () + " for study ID " + projectId);
return xnatProject;
}
else {
LogUtils.logDebug ("Found no project with ID or alias [" + projectId + "]");
// for the following code, refer to org.nrg.xnat.turbine.modules.actions.AddProject
xnatProject = new XnatProjectdata (xnatUser);
try {
xnatProject.setId (projectId);
xnatProject.setSecondaryId (projectTitle);
xnatProject.setName (projectTitle);
if (!("".equals (projectDescription))) {
xnatProject.setDescription (projectDescription);
}
xnatProject.trimProjectFields ();
final PersistentWorkflowI wrk = PersistentWorkflowUtils.getOrCreateWorkflowData (null, xnatUser, XnatProjectdata.SCHEMA_ELEMENT_NAME, xnatProject.getId(), xnatProject.getId(), new EventDetails (EventUtils.CATEGORY.PROJECT_ADMIN, EventUtils.TYPE.PROCESS, EventUtils.getAddModifyAction(xnatProject.getXSIType (), true), "Project not existant", "Creating project for automation"));
final EventMetaI ci = wrk.buildEvent ();
// prepare(?) the workflow for saving (?)
PersistentWorkflowUtils.save (wrk, ci);
// "real" saving of the project (with verification of authorization but since we're considered admin here, it causes no problem)
xnatProject = BaseXnatProjectdata.createProject(xnatProject, xnatUser, false, true, ci, "protected");
final XnatProjectdata xnatProjectPostSave = new XnatProjectdata (xnatUser);
xnatProjectPostSave.setId (xnatProject.getId ());
xnatProjectPostSave.setSecondaryId (xnatProject.getSecondaryId ());
xnatProjectPostSave.setName (xnatProject.getName ());
xnatProjectPostSave.getItem ().setUser(xnatUser);
xnatProjectPostSave.initGroups ();
Groups.reloadGroupForUser (xnatUser, xnatProjectPostSave.getId() + "_" + BaseXnatProjectdata.OWNER_GROUP);
// for the main folder for saving on the disk
ArcProject arcProject = new ArcProject (xnatUser);
arcProject.setCurrentArc ("arc001");
xnatProjectPostSave.initArcProject (arcProject, xnatUser, ci);
// set project accessibility to protected
Permissions.setDefaultAccessibility (xnatProject.getId (), "protected", true, xnatUser, ci);
// complete(?) the workflow
PersistentWorkflowUtils.complete (wrk, ci);
// trigger event that a new project was created
final NrgEventService eventService = XDAT.getContextService ().getBean (NrgEventService.class);
eventService.triggerEvent (new XftItemEvent (XnatProjectdata.SCHEMA_ELEMENT_NAME, xnatProjectPostSave.getId (), XftItemEvent.UPDATE));
LogUtils.logString ("Project [" + projectId + "] created.");
//addProjectAdminOwner (projectId, xnatUser);
// set autoarchive to false
// NOTE : does not work above ie before the project is created
if (disableAutoarchive) {
setProjectPrearchivecode (projectId, 0, xnatUser);
}
if (setPipelines) {
final Map<String, Boolean> projectPipelines = XnatProjectUtils.getProjectPipelinesFromConfig (xnatUser);
addProjectPipelines (projectId, projectPipelines, xnatUser);
}
return xnatProject;
}
catch (Exception e) {
LogUtils.logException(e);
return null;
}
}
}