@ -37,6 +37,7 @@ import eu.eudat.logic.services.operations.DatabaseRepository;
import eu.eudat.logic.services.utilities.UtilitiesService ;
import eu.eudat.logic.utilities.builders.XmlBuilder ;
import eu.eudat.logic.utilities.documents.helpers.FileEnvelope ;
import eu.eudat.logic.utilities.documents.pdf.PDFUtils ;
import eu.eudat.logic.utilities.documents.types.ParagraphStyle ;
import eu.eudat.logic.utilities.documents.word.WordBuilder ;
import eu.eudat.logic.utilities.documents.xml.ExportXmlBuilder ;
@ -59,6 +60,7 @@ import eu.eudat.models.data.user.composite.PagedDatasetProfile;
import eu.eudat.models.data.userinfo.UserListingModel ;
import eu.eudat.queryable.QueryableList ;
import eu.eudat.types.Authorities ;
import eu.eudat.types.MetricNames ;
import org.apache.poi.xwpf.usermodel.XWPFDocument ;
import org.apache.poi.xwpf.usermodel.XWPFParagraph ;
import org.apache.poi.xwpf.usermodel.XWPFRun ;
@ -77,6 +79,7 @@ import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document ;
import org.w3c.dom.Element ;
import javax.transaction.Transactional ;
import javax.xml.bind.JAXBContext ;
import javax.xml.bind.JAXBException ;
import javax.xml.bind.Unmarshaller ;
@ -108,9 +111,10 @@ public class DataManagementPlanManager {
private Environment environment ;
private RDAManager rdaManager ;
private UserManager userManager ;
private final MetricsManager metricsManager ;
@Autowired
public DataManagementPlanManager ( ApiContext apiContext , DatasetManager datasetManager , Environment environment , RDAManager rdaManager , UserManager userManager ) {
public DataManagementPlanManager ( ApiContext apiContext , DatasetManager datasetManager , Environment environment , RDAManager rdaManager , UserManager userManager , MetricsManager metricsManager ) {
this . apiContext = apiContext ;
this . datasetManager = datasetManager ;
this . utilitiesService = apiContext . getUtilitiesService ( ) ;
@ -118,6 +122,7 @@ public class DataManagementPlanManager {
this . environment = environment ;
this . rdaManager = rdaManager ;
this . userManager = userManager ;
this . metricsManager = metricsManager ;
}
/ *
@ -149,8 +154,10 @@ public class DataManagementPlanManager {
items = null ;
}
}
if ( items = = null ) {
items = apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . getWithCriteria ( dataManagementPlanTableRequest . getCriteria ( ) ) ;
}
List < Integer > roles = new LinkedList < > ( ) ;
if ( ! dataManagementPlanTableRequest . getCriteria ( ) . isOnlyPublic ( ) ) {
if ( dataManagementPlanTableRequest . getCriteria ( ) . getRole ( ) ! = null )
@ -159,8 +166,11 @@ public class DataManagementPlanManager {
} else {
authItems = items ;
}
if ( dmps = = null ) {
totalData = authItems . count ( ) ;
items = PaginationManager . applyPaging ( authItems , dataManagementPlanTableRequest ) ;
} else {
items = authItems ;
}
@ -175,6 +185,8 @@ public class DataManagementPlanManager {
dataTable . setData ( dmps1 . stream ( ) . map ( dmp - > {
DatasetCriteria datasetCriteria = new DatasetCriteria ( ) ;
datasetCriteria . setDmpIds ( Collections . singletonList ( dmp . getId ( ) ) ) ;
datasetCriteria . setAllVersions ( false ) ;
datasetCriteria . setIsPublic ( dataManagementPlanTableRequest . getCriteria ( ) . getIsPublic ( ) ) ;
dmp . setDataset ( retrieveRelevantDatasets ( datasetCriteria , principalID ) ) ;
@ -240,14 +252,14 @@ public class DataManagementPlanManager {
roles . add ( 1 ) ;
datasetItems = apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDatasetDao ( ) . getAuthenticated ( datasetItems , userInfo , roles ) ;
}
Long maxDatasets = datasetItems . count( ) ;
Long maxDatasets = datasetItems . distinct( ) . count( ) ;
DatasetTableRequest datasetTableRequest = new DatasetTableRequest ( ) ;
datasetTableRequest . setOffset ( 0 ) ;
datasetTableRequest . setLength ( 3 ) ;
Set < Dataset > datasetsSet = new LinkedHashSet < > ( ) ;
try {
datasetItems = PaginationManager . applyPaging ( datasetItems , datasetTableRequest ) ;
List < Dataset > datasets = datasetItems . toList( ) ;
List < Dataset > datasets = datasetItems . distinct( ) . toList( ) ;
datasetsSet . addAll ( datasets ) ;
for ( int i = 0 ; i < maxDatasets - datasets . size ( ) ; i + + ) {
Dataset fakedataset = new Dataset ( ) ;
@ -441,7 +453,7 @@ public class DataManagementPlanManager {
setNotification = true ;
} else {
MetricsManager. increaseValue ( "argos_managed_dmps" , 1 , "draft" ) ;
metricsManager. increaseValue ( MetricNames . DMP , 1 , MetricNames . DRAFT ) ;
}
DMP newDmp = dataManagementPlan . toDataModel ( ) ;
@ -532,6 +544,9 @@ public class DataManagementPlanManager {
if ( dataManagementPlan . getAssociatedUsers ( ) . size ( ) = = 0 )
assignUser ( newDmp , user ) ;
UUID dmpId = newDmp . getId ( ) ;
newDmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( newDmp ) ;
if ( setNotification ) {
@ -565,7 +580,7 @@ public class DataManagementPlanManager {
if ( dataManagementPlan . getStatus ( ) = = ( int ) DMP . DMPStatus . FINALISED . getValue ( ) & & dmp1 . getStatus ( ) . equals ( DMP . DMPStatus . FINALISED . getValue ( ) ) )
throw new Exception ( "DMP is finalized, therefore cannot be edited." ) ;
} else {
MetricsManager. increaseValue ( "argos_managed_dmps" , 1 , "draft" ) ;
metricsManager. increaseValue ( MetricNames . DMP , 1 , MetricNames . DRAFT ) ;
}
List < Dataset > datasets = new ArrayList < > ( ) ;
DMP tempDMP = dataManagementPlan . toDataModel ( ) ;
@ -586,6 +601,11 @@ public class DataManagementPlanManager {
datasets . add ( dataset ) ;
}
UUID dmpId = result . getId ( ) ;
result . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( result ) ;
return result ;
}
@ -623,15 +643,31 @@ public class DataManagementPlanManager {
assignGrandUserIfInternal ( newDmp , user ) ;
assignFunderUserIfInternal ( newDmp , user ) ;
assignProjectUserIfInternal ( newDmp , user ) ;
if ( newDmp . getGrant ( ) . getStartdate ( ) = = null ) {
newDmp . getGrant ( ) . setStartdate ( new Date ( ) ) ;
}
if ( newDmp . getGrant ( ) . getEnddate ( ) = = null ) {
newDmp . getGrant ( ) . setEnddate ( Date . from ( Instant . now ( ) . plus ( 365 , ChronoUnit . DAYS ) ) ) ;
}
databaseRepository . getGrantDao ( ) . createOrUpdate ( newDmp . getGrant ( ) ) ;
DMP tempDmp = databaseRepository . getDmpDao ( ) . createOrUpdate ( newDmp ) ;
newDmp . setId ( tempDmp . getId ( ) ) ;
// Assign creator.
assignUser ( newDmp , user ) ;
//assignUser(newDmp, user);
copyDatasets ( newDmp , databaseRepository . getDatasetDao ( ) ) ;
databaseRepository
. getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , oldDmp . getId ( ) ) )
. toList ( ) . stream ( ) . forEach ( userDMP - > {
UserDMP temp = new UserDMP ( ) ;
temp . setUser ( userDMP . getUser ( ) ) ;
temp . setRole ( userDMP . getRole ( ) ) ;
temp . setDmp ( newDmp ) ;
apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . createOrUpdate ( temp ) ;
} ) ;
newDmp . setUsers ( new HashSet < > ( databaseRepository . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , newDmp . getId ( ) ) ) . toList ( ) ) ) ;
DatasetCriteria criteria1 = new DatasetCriteria ( ) ;
@ -679,9 +715,11 @@ public class DataManagementPlanManager {
DatasetCriteria criteria1 = new DatasetCriteria ( ) ;
criteria1 . setDmpIds ( Collections . singletonList ( newDmp . getId ( ) ) ) ;
newDmp . setDataset ( new HashSet < > ( databaseRepository . getDatasetDao ( ) . getWithCriteria ( criteria1 ) . toList ( ) ) ) ;
UUID dmpId = newDmp . getId ( ) ;
newDmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( newDmp ) ;
MetricsManager. increaseValue ( "argos_managed_dmps" , 1 , "draft" ) ;
metricsManager. increaseValue ( MetricNames . DMP , 1 , MetricNames . DRAFT ) ;
return newDmp . getId ( ) ;
}
@ -695,26 +733,30 @@ public class DataManagementPlanManager {
DMP oldDmp = apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . find ( uuid ) ;
switch ( oldDmp . getStatus ( ) ) {
case 0 :
MetricsManager. decreaseValue ( "argos_managed_dmps" , 1 , "draft" ) ;
metricsManager. decreaseValue ( MetricNames . DMP , 1 , MetricNames . DRAFT ) ;
break ;
case 1 :
if ( oldDmp . getDoi ( ) ! = null ) {
MetricsManager. decreaseValue ( "argos_managed_dmps" , 1 , "doied" ) ;
metricsManager. decreaseValue ( MetricNames . DMP , 1 , MetricNames . DOIED ) ;
}
if ( oldDmp . isPublic ( ) ) {
MetricsManager. decreaseValue ( "argos_managed_dmps" , 1 , "published" ) ;
metricsManager. decreaseValue ( MetricNames . DMP , 1 , MetricNames . PUBLISHED ) ;
}
MetricsManager. decreaseValue ( "argos_managed_dmps" , 1 , "finalized" ) ;
metricsManager. decreaseValue ( MetricNames . DMP , 1 , MetricNames . FINALIZED ) ;
break ;
}
oldDmp . setStatus ( DMP . DMPStatus . DELETED . getValue ( ) ) ;
apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . createOrUpdate ( oldDmp ) ;
UUID dmpId = oldDmp . getId ( ) ;
oldDmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( oldDmp ) ;
DataManagementPlanCriteria criteria1 = new DataManagementPlanCriteria ( ) ;
criteria1 . setAllVersions ( true ) ;
criteria1 . setGroupIds ( Collections . singletonList ( oldDmp . getGroupId ( ) ) ) ;
apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . getWithCriteria ( criteria1 ) . toList ( ) . forEach ( dmp - > {
try {
UUID tdmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , tdmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( dmp ) ;
} catch ( IOException e ) {
logger . error ( e . getMessage ( ) , e ) ;
@ -726,6 +768,7 @@ public class DataManagementPlanManager {
if ( elastic ! = null ) {
tags = elastic . getTags ( ) ;
}
dataset . setDmp ( dmp ) ;
this . datasetManager . updateTags ( dataset , tags ) ;
} catch ( Exception e ) {
logger . error ( e . getMessage ( ) , e ) ;
@ -744,7 +787,7 @@ public class DataManagementPlanManager {
else {
researcher . setCreationUser ( user ) ;
researcherRepository . createOrUpdate ( researcher ) ;
MetricsManager. increaseValue ( "argos_researchers" , 1 , null ) ;
metricsManager. increaseValue ( MetricNames . RESEARCHER , 1 , null ) ;
}
}
}
@ -785,6 +828,12 @@ public class DataManagementPlanManager {
else {
grant . setType ( Grant . GrantType . EXTERNAL . getValue ( ) ) ;
grant . setCreationUser ( null ) ;
if ( grant . getStartdate ( ) = = null ) {
grant . setStartdate ( new Date ( ) ) ;
}
if ( grant . getEnddate ( ) = = null ) {
grant . setEnddate ( Date . from ( Instant . now ( ) . plus ( 365 , ChronoUnit . DAYS ) ) ) ;
}
grantDao . createOrUpdate ( grant ) ;
}
}
@ -823,21 +872,24 @@ public class DataManagementPlanManager {
eu . eudat . data . entities . Project projectEntity = projectDao . getWithCritetia ( criteria ) . toList ( ) . stream ( ) . max ( Comparator . comparing ( project1 - > project1 . getModified ( ) . getTime ( ) ) ) . orElse ( null ) ;
if ( projectEntity ! = null ) project . setId ( projectEntity . getId ( ) ) ;
else {
project . setType ( Project . ProjectType . EXTERNAL . getValue ( ) ) ;
if ( project . getId ( ) = = null ) project . setId ( UUID . randomUUID ( ) ) ;
projectDao . createOrUpdate ( project ) ;
MetricsManager . increaseValue ( "argos_projects" , 1 , null ) ;
createExternalProject ( project , projectDao ) ;
}
}
else {
project . setType ( Project . ProjectType . EXTERNAL . getValue ( ) ) ;
if ( project . getId ( ) = = null ) project . setId ( UUID . randomUUID ( ) ) ;
projectDao . createOrUpdate ( project ) ;
MetricsManager . increaseValue ( "argos_projects" , 1 , null ) ;
createExternalProject ( project , projectDao ) ;
}
}
}
private void createExternalProject ( Project project , ProjectDao projectDao ) {
if ( project . getStartdate ( ) = = null ) project . setStartdate ( new Date ( ) ) ;
if ( project . getEnddate ( ) = = null ) project . setEnddate ( new Date ( ) ) ;
project . setType ( Project . ProjectType . EXTERNAL . getValue ( ) ) ;
if ( project . getId ( ) = = null ) project . setId ( UUID . randomUUID ( ) ) ;
projectDao . createOrUpdate ( project ) ;
metricsManager . increaseValue ( MetricNames . PROJECT , 1 , null ) ;
}
private void copyDatasets ( DMP newDmp , DatasetDao datasetDao ) {
List < CompletableFuture < Dataset > > futures = new LinkedList < > ( ) ;
for ( Dataset dataset : newDmp . getDataset ( ) ) {
@ -851,7 +903,8 @@ public class DataManagementPlanManager {
if ( elastic ! = null ) {
tags = elastic . getTags ( ) ;
}
UUID dmpId = tempDataset . getDmp ( ) . getId ( ) ;
tempDataset . getDmp ( ) . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . datasetManager . updateTags ( tempDataset , tags ) ;
} catch ( Exception e ) {
logger . error ( e . getMessage ( ) , e ) ;
@ -910,7 +963,7 @@ public class DataManagementPlanManager {
return newDataset ;
} ) . thenApplyAsync ( item - > {
futures . add ( datasetDao . createOrUpdateAsync ( item ) . whenComplete ( ( ( dataset1 , throwable ) - > {
MetricsManager. increaseValue ( "argos_managed_dataset_descriptions" , 1 , "draft" ) ;
metricsManager. increaseValue ( MetricNames . DATASET , 1 , MetricNames . DRAFT ) ;
eu . eudat . elastic . entities . Dataset datasetElastic = new eu . eudat . elastic . entities . Dataset ( ) ;
datasetElastic . setId ( dataset1 . getId ( ) . toString ( ) ) ;
datasetElastic . setLabel ( dataset1 . getLabel ( ) ) ;
@ -968,8 +1021,10 @@ public class DataManagementPlanManager {
throw new Exception ( "DMP is not finalized" ) ;
dmp . setPublic ( true ) ;
apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . createOrUpdate ( dmp ) ;
UUID dmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( dmp ) ;
MetricsManager . increaseValue ( "argos_managed_dmps" , 1 , "published" ) ;
metricsManager. increaseValue ( MetricNames . DMP , 1 , MetricNames . PUBLISHED ) ;
DataManagementPlanCriteria criteria = new DataManagementPlanCriteria ( ) ;
criteria . setGroupIds ( Collections . singletonList ( dmp . getGroupId ( ) ) ) ;
criteria . setAllVersions ( true ) ;
@ -981,8 +1036,10 @@ public class DataManagementPlanManager {
if ( elastic ! = null ) {
tags = elastic . getTags ( ) ;
}
UUID tmdmpId = dataset . getDmp ( ) . getId ( ) ;
dataset . getDmp ( ) . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , tmdmpId ) ) . toList ( ) ) ) ;
this . datasetManager . updateTags ( dataset , tags ) ;
MetricsManager . increaseValue ( "argos_managed_dataset_descriptions" , 1 , "published" ) ;
metricsManager. increaseValue ( MetricNames . DATASET , 1 , MetricNames . PUBLISHED ) ;
} catch ( Exception e ) {
logger . error ( e . getMessage ( ) , e ) ;
}
@ -995,6 +1052,7 @@ public class DataManagementPlanManager {
}
}
@Transactional
public void makeFinalize ( UUID id , Principal principal , DatasetsToBeFinalized datasetsToBeFinalized ) throws Exception {
DMP dmp = this . apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . find ( id ) ;
if ( ! isUserOwnerOfDmp ( dmp , principal ) )
@ -1065,14 +1123,16 @@ public class DataManagementPlanManager {
}
dmp . setStatus ( DMP . DMPStatus . FINALISED . getValue ( ) ) ;
apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . createOrUpdate ( dmp ) ;
UUID dmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( dmp ) ;
UserInfo user = apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserInfoDao ( ) . find ( principal . getId ( ) ) ;
sendNotification ( dmp , user , NotificationType . DMP_FINALISED ) ;
MetricsManager. decreaseValue ( "argos_managed_dmps" , 1 , "draft" ) ;
MetricsManager. increaseValue ( "argos_managed_dmps" , 1 , "finalized" ) ;
metricsManager. decreaseValue ( MetricNames . DMP , 1 , MetricNames . DRAFT ) ;
metricsManager. increaseValue ( MetricNames . DMP , 1 , MetricNames . FINALIZED ) ;
this . updateDatasetsIndex ( indexDatasets ) ;
MetricsManager. decreaseValue ( "argos_managed_dataset_descriptions" , indexDatasets . size ( ) , "draft" ) ;
MetricsManager. increaseValue ( "argos_managed_dataset_descriptions" , indexDatasets . size ( ) , "finalized" ) ;
metricsManager. decreaseValue ( MetricNames . DATASET , indexDatasets . size ( ) , MetricNames . DRAFT ) ;
metricsManager. increaseValue ( MetricNames . DATASET , indexDatasets . size ( ) , MetricNames . FINALIZED ) ;
}
public void undoFinalize ( UUID id , Principal principal ) throws Exception {
@ -1083,9 +1143,11 @@ public class DataManagementPlanManager {
throw new Exception ( "DMP is already Active" ) ;
dmp . setStatus ( DMP . DMPStatus . ACTIVE . getValue ( ) ) ;
apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . createOrUpdate ( dmp ) ;
UUID dmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( dmp ) ;
MetricsManager . decreaseValue ( "argos_managed_dmps" , 1 , "finalized" ) ;
MetricsManager. increaseValue ( "argos_managed_dmps" , 1 , "draft" ) ;
metricsManager. decreaseValue ( MetricNames . DMP , 1 , MetricNames . FINALIZED ) ;
metricsManager. increaseValue ( MetricNames . DMP , 1 , MetricNames . DRAFT ) ;
}
public void updateUsers ( UUID id , List < UserInfoListingModel > users , Principal principal ) throws Exception {
@ -1122,7 +1184,7 @@ public class DataManagementPlanManager {
wordBuilder . addParagraphContent ( "Data Management Plan Information" , document , ParagraphStyle . HEADER1 , BigInteger . ZERO ) ;
// DMP title custom style.
wordBuilder . addParagraphContent ( dmpEntity . getLabel ( ) , document , ParagraphStyle . HEADER2 , BigInteger . ZERO ) ;
wordBuilder . addParagraphContent ( dmpEntity . getDescription ( ) , document , ParagraphStyle . TEXT , BigInteger . ZERO ) ;
wordBuilder . addParagraphContent ( dmpEntity . getDescription ( ) , document , ParagraphStyle . HTML , BigInteger . ZERO ) ;
wordBuilder . addParagraphContent ( "Funder" , document , ParagraphStyle . HEADER3 , BigInteger . ZERO ) ;
if ( dmpEntity . getGrant ( ) . getFunder ( ) ! = null )
@ -1161,8 +1223,14 @@ public class DataManagementPlanManager {
. forEach ( datasetEntity - > {
Map < String , Object > properties = new HashMap < > ( ) ;
if ( datasetEntity . getProperties ( ) ! = null ) {
JSONObject jObject = new JSONObject ( datasetEntity . getProperties ( ) ) ;
properties = jObject . toMap ( ) ;
ObjectMapper objectMapper = new ObjectMapper ( ) ;
try {
properties = objectMapper . readValue ( datasetEntity . getProperties ( ) , LinkedHashMap . class ) ;
} catch ( IOException e ) {
logger . error ( e . getLocalizedMessage ( ) , e ) ;
}
/ * JSONObject jObject = new JSONObject ( datasetEntity . getProperties ( ) ) ;
properties = jObject . toMap ( ) ; * /
}
// Custom style for the Dataset title.
@ -1226,7 +1294,7 @@ public class DataManagementPlanManager {
} * /
wordBuilder . addParagraphContent ( datasetEntity . getDescription ( ) , document , ParagraphStyle . TEXT , BigInteger . ZERO ) ;
wordBuilder . addParagraphContent ( datasetEntity . getDescription ( ) , document , ParagraphStyle . HTML , BigInteger . ZERO ) ;
// Dataset Description custom style.
XWPFParagraph datasetDescriptionParagraph = document . createParagraph ( ) ;
@ -1277,7 +1345,7 @@ public class DataManagementPlanManager {
eu . eudat . data . entities . DMP dmp = databaseRepository . getDmpDao ( ) . find ( UUID . fromString ( id ) ) ;
if ( ! dmp . isPublic ( ) & & dmp . getUsers ( ) . stream ( ) . filter ( userInfo - > userInfo . getUser ( ) . getId ( ) = = principal . getId ( ) ) . collect ( Collectors . toList ( ) ) . size ( ) = = 0 )
throw new UnauthorisedException ( ) ;
List < Dataset > datasets = dmp . getDataset ( ) . stream ( ) . collect( Collectors . toList ( ) ) ;
List < Dataset > datasets = dmp . getDataset ( ) . stream ( ) . filter( dataset - > dataset . getStatus ( ) ! = Dmp . DMPStatus . DELETED . getValue ( ) ) . collect( Collectors . toList ( ) ) ;
/ * String fileName = dmp . getLabel ( ) ;
fileName = fileName . replaceAll ( "[^a-zA-Z0-9+ ]" , "" ) ; * /
String uuid = UUID . randomUUID ( ) . toString ( ) ;
@ -1292,6 +1360,22 @@ public class DataManagementPlanManager {
dmpName . setTextContent ( dmp . getLabel ( ) ) ;
dmpElement . appendChild ( dmpName ) ;
if ( dmp . getExtraProperties ( ) ! = null & & ! dmp . getExtraProperties ( ) . isEmpty ( ) ) {
Map < String , Object > extraProperties = new ObjectMapper ( ) . readValue ( dmp . getExtraProperties ( ) , HashMap . class ) ;
Element language = xmlDoc . createElement ( "language" ) ;
language . setTextContent ( extraProperties . get ( "language" ) ! = null ? extraProperties . get ( "language" ) . toString ( ) : null ) ;
dmpElement . appendChild ( language ) ;
Element visibility = xmlDoc . createElement ( "visibility" ) ;
visibility . setTextContent ( extraProperties . get ( "visible" ) ! = null ? extraProperties . get ( "visible" ) . toString ( ) : null ) ;
dmpElement . appendChild ( visibility ) ;
Element publicDate = xmlDoc . createElement ( "publicDate" ) ;
publicDate . setTextContent ( extraProperties . get ( "publicDate" ) ! = null ? extraProperties . get ( "publicDate" ) . toString ( ) : null ) ;
dmpElement . appendChild ( publicDate ) ;
Element costs = xmlDoc . createElement ( "costs" ) ;
costs . setTextContent ( extraProperties . get ( "costs" ) ! = null ? extraProperties . get ( "costs" ) . toString ( ) : null ) ;
dmpElement . appendChild ( costs ) ;
}
DMPProfile dmpProfile = dmp . getProfile ( ) ;
Element dmpProfileElement = xmlDoc . createElement ( "dmpProfile" ) ;
Element dmpProfileName = xmlDoc . createElement ( "dmpProfileName" ) ;
@ -1407,7 +1491,7 @@ public class DataManagementPlanManager {
return fileEnvelope ;
}
public ResponseEntity < byte [ ] > getRDAJsonDocument ( String id , DatasetManager datasetManager , Principal principal ) throws Exception {
public ResponseEntity < byte [ ] > getRDAJsonDocument ( String id , Principal principal ) throws Exception {
eu . eudat . data . entities . DMP dmp = databaseRepository . getDmpDao ( ) . find ( UUID . fromString ( id ) ) ;
if ( ! dmp . isPublic ( ) & & dmp . getUsers ( ) . stream ( ) . noneMatch ( userInfo - > userInfo . getUser ( ) . getId ( ) = = principal . getId ( ) ) )
throw new UnauthorisedException ( ) ;
@ -1417,7 +1501,7 @@ public class DataManagementPlanManager {
/ * ObjectMapper mapper = new ObjectMapper ( ) ;
mapper . setSerializationInclusion ( JsonInclude . Include . NON_NULL ) ; * /
String fileName = "DMP_" + dmp . getGrant ( ) . getLabel ( ) + "_" + dmp . getVersion ( ) ; //dmp.getLabel();
fileName = fileName . replaceAll ( "[^a-zA-Z0-9+ ]" , "" ) ;
fileName = fileName . replaceAll ( "[^a-zA-Z0-9+ ]" , "" ) .replace ( " " , "_" ) . replace ( "," , "_" ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
File file = new File ( this . environment . getProperty ( "temp.temp" ) + uuid + ".json" ) ;
OutputStream output = new FileOutputStream ( file ) ;
@ -1456,11 +1540,12 @@ public class DataManagementPlanManager {
default :
file = getXmlDocument ( id , principal ) ;
}
String fileName = file . getFilename ( ) . replace ( " " , "_" ) . replace ( "," , "_" ) ;
InputStream resource = new FileInputStream ( file . getFile ( ) ) ;
HttpHeaders responseHeaders = new HttpHeaders ( ) ;
responseHeaders . setContentLength ( file . getFile ( ) . length ( ) ) ;
responseHeaders . setContentType ( MediaType . APPLICATION_OCTET_STREAM ) ;
responseHeaders . set ( "Content-Disposition" , "attachment;filename=" + file . getFilename ( ) ) ;
responseHeaders . set ( "Content-Disposition" , "attachment;filename=" + file Name ) ;
responseHeaders . set ( "Access-Control-Expose-Headers" , "Content-Disposition" ) ;
responseHeaders . get ( "Access-Control-Expose-Headers" ) . add ( "Content-Type" ) ;
@ -1580,6 +1665,21 @@ public class DataManagementPlanManager {
dm . setAssociatedUsers ( associatedUsers ) ; // Sets associatedUsers property.
dm . setDynamicFields ( dynamicFields ) ; // Sets dynamicFields property.
dm . setDefinition ( dmpProfile ) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
Map < String , Object > extraPropertiesMap = new HashMap < > ( ) ;
if ( dataManagementPlans . get ( 0 ) . getLanguage ( ) ! = null ) {
extraPropertiesMap . put ( "language" , dataManagementPlans . get ( 0 ) . getLanguage ( ) ) ;
}
if ( dataManagementPlans . get ( 0 ) . getVisibility ( ) ! = null ) {
extraPropertiesMap . put ( "visible" , dataManagementPlans . get ( 0 ) . getVisibility ( ) ) ;
}
if ( dataManagementPlans . get ( 0 ) . getPublicDate ( ) ! = null ) {
extraPropertiesMap . put ( "publicDate" , dataManagementPlans . get ( 0 ) . getPublicDate ( ) ) ;
}
if ( dataManagementPlans . get ( 0 ) . getCosts ( ) ! = null ) {
extraPropertiesMap . put ( "costs" , mapper . readValue ( dataManagementPlans . get ( 0 ) . getCosts ( ) , ArrayList . class ) ) ;
}
dm . setExtraProperties ( extraPropertiesMap ) ;
//createOrUpdate(apiContext, dm, principal);
DMP dmp = this . createOrUpdate ( dm , principal ) ;
@ -1622,7 +1722,7 @@ public class DataManagementPlanManager {
// datasets.add(new DatasetListingModel().fromDataModel(dataset));
}
logger . info ( dm . toString ( ) ) ;
//logger.info(dm.toString());
}
return dataManagementPlans ;
@ -1654,6 +1754,8 @@ public class DataManagementPlanManager {
databaseRepository . getDmpDao ( ) . createOrUpdate ( dmp ) ;
assignUser ( dmp , me ) ;
if ( this . apiContext . getOperationsContext ( ) . getElasticRepository ( ) . getDmpRepository ( ) . getClient ( ) ! = null ) {
UUID dmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( dmp ) ;
}
dmp . getDataset ( ) . forEach ( dataset - > {
@ -1676,13 +1778,13 @@ public class DataManagementPlanManager {
try {
List < Tag > tags = new ArrayList < > ( ) ;
eu . eudat . elastic . entities . Dataset elastic = apiContext . getOperationsContext ( ) . getElasticRepository ( ) . getDatasetRepository ( ) . findDocument ( dataset . getId ( ) . toString ( ) ) ;
DatasetWizardModel datasetWizardModel = new DatasetWizardModel ( ) . fromDataModel ( dataset ) ;
if ( elastic ! = null ) {
tags = elastic . getTags ( ) ;
DatasetWizardModel datasetWizardModel = new DatasetWizardModel ( ) . fromDataModel ( dataset ) ;
datasetWizardModel . setTags ( tags ) ;
datasetManager . getTagsFromProfile ( datasetWizardModel , dataset ) ;
datasetManager . updateTags ( dataset , datasetWizardModel . getTags ( ) ) ;
}
datasetManager . getTagsFromProfile ( datasetWizardModel , dataset ) ;
datasetManager . updateTags ( dataset , datasetWizardModel . getTags ( ) ) ;
} catch ( Exception e ) {
logger . error ( e . getMessage ( ) , e ) ;
}
@ -1745,6 +1847,9 @@ public class DataManagementPlanManager {
try {
if ( dmp . getUsers ( ) ! = null ) {
logger . info ( dmp . getUsers ( ) . toString ( ) ) ;
} else {
UUID dmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
}
this . updateIndex ( dmp ) ;
} catch ( IOException e ) {
@ -1762,6 +1867,8 @@ public class DataManagementPlanManager {
if ( elastic ! = null ) {
tags = elastic . getTags ( ) ;
}
UUID dmpId = dataset . getDmp ( ) . getId ( ) ;
dataset . getDmp ( ) . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . datasetManager . updateTags ( dataset , tags ) ;
} catch ( Exception e ) {
logger . error ( e . getMessage ( ) , e ) ;
@ -1770,7 +1877,7 @@ public class DataManagementPlanManager {
} ) ;
}
p rivate void updateIndex ( DMP dmp ) throws IOException {
p ublic void updateIndex ( DMP dmp ) throws IOException {
DmpMapper mapper = new DmpMapper ( apiContext , datasetManager ) ;
Dmp elastic = mapper . toElastic ( dmp ) ;
apiContext . getOperationsContext ( ) . getElasticRepository ( ) . getDmpRepository ( ) . createOrUpdate ( elastic ) ;
@ -1782,6 +1889,8 @@ public class DataManagementPlanManager {
List < DMP > dmps = apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . asQueryable ( ) . toList ( ) ;
dmps . forEach ( dmp - > {
try {
UUID dmpId = dmp . getId ( ) ;
dmp . setUsers ( new HashSet < > ( apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getUserDmpDao ( ) . asQueryable ( ) . where ( ( builder , root ) - > builder . equal ( root . get ( "dmp" ) . get ( "id" ) , dmpId ) ) . toList ( ) ) ) ;
this . updateIndex ( dmp ) ;
} catch ( IOException e ) {
logger . error ( e . getMessage ( ) , e ) ;
@ -2016,10 +2125,10 @@ public class DataManagementPlanManager {
}
dataBuilder . append ( " }\n" ) . append ( "}" ) ;
createData = dataBuilder . toString ( ) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
/ * ObjectMapper mapper = new ObjectMapper ( ) ;
mapper . configure ( JsonParser . Feature . ALLOW_UNQUOTED_CONTROL_CHARS , true ) ;
JsonNode createDataJSON = mapper . readTree ( createData ) ;
HttpEntity < JsonNode > request = new HttpEntity < > ( createData JSON , headers ) ;
JsonNode createDataJSON = mapper . readTree ( createData ) ; * /
HttpEntity < String > request = new HttpEntity < > ( createData , headers ) ;
Map createResponse = null ;
LinkedHashMap < String , String > links = null ;
String previousDOI = this . getPreviousDOI ( dmp . getGroupId ( ) , dmp . getId ( ) ) ;
@ -2081,19 +2190,19 @@ public class DataManagementPlanManager {
if ( unpublishedUrl = = null ) {
// Second step, add the file to the entry.
FileEnvelope file = getWordDocument ( id . toString ( ) , principal , configLoader ) ;
/ * String name = file . getFilename ( ) . substring ( 0 , file . getFilename ( ) . length ( ) - 5 ) ;
File pdfFile = datasetManager . convertToPDF ( file , environment ) ;
String fileName = name + ".pdf" ; * /
FileSystemResource fileSystemResource = new FileSystemResource ( file. get File( ) ) ;
String name = file . getFilename ( ) . substring ( 0 , file . getFilename ( ) . length ( ) - 5 ) ;
File pdfFile = PDFUtils . convertToPDF ( file , environment ) ;
String fileName = name + ".pdf" ;
FileSystemResource fileSystemResource = new FileSystemResource ( pd fFile) ;
HttpEntity < FileSystemResource > addFileMapRequest = new HttpEntity < > ( fileSystemResource , null ) ;
String addFileUrl = links . get ( "bucket" ) + "/" + file . getFilename ( ) + "?access_token=" + zenodoToken ;
String addFileUrl = links . get ( "bucket" ) + "/" + file Name + "?access_token=" + zenodoToken ;
restTemplate . put ( addFileUrl , addFileMapRequest ) ;
Files . deleteIfExists ( file . getFile ( ) . toPath ( ) ) ;
ResponseEntity < byte [ ] > jsonFile ;
try {
jsonFile = getRDAJsonDocument ( id . toString ( ) , datasetManager, principal) ;
jsonFile = getRDAJsonDocument ( id . toString ( ) , principal) ;
} catch ( Exception e ) {
throw e ;
}
@ -2104,7 +2213,9 @@ public class DataManagementPlanManager {
jsonFos . flush ( ) ;
}
fileSystemResource = new FileSystemResource ( tempJsonFile ) ;
addFileMapRequest = new HttpEntity < > ( fileSystemResource , null ) ;
HttpHeaders jsonHeaders = new HttpHeaders ( ) ;
jsonHeaders . add ( HttpHeaders . CONTENT_TYPE , MediaType . APPLICATION_OCTET_STREAM_VALUE ) ;
addFileMapRequest = new HttpEntity < > ( fileSystemResource , jsonHeaders ) ;
String jsonFileName = jsonFile . getHeaders ( ) . get ( "Content-Disposition" ) . get ( 0 ) . substring ( jsonFile . getHeaders ( ) . get ( "Content-Disposition" ) . get ( 0 ) . lastIndexOf ( '=' ) + 1 ) ;
addFileUrl = links . get ( "bucket" ) + "/" + jsonFileName + "?access_token=" + zenodoToken ;
restTemplate . put ( addFileUrl , addFileMapRequest ) ;
@ -2168,51 +2279,6 @@ public class DataManagementPlanManager {
}
public long countAllDrafts ( ) {
DataManagementPlanCriteria criteria = new DataManagementPlanCriteria ( ) ;
criteria . setStatus ( 0 ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . getWithCriteria ( criteria ) . count ( ) ;
}
public long countAllFinalized ( ) {
DataManagementPlanCriteria criteria = new DataManagementPlanCriteria ( ) ;
criteria . setStatus ( 1 ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . getWithCriteria ( criteria ) . count ( ) ;
}
public long countAllPublished ( ) {
DataManagementPlanCriteria criteria = new DataManagementPlanCriteria ( ) ;
criteria . setIsPublic ( true ) ;
criteria . setOnlyPublic ( true ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . getWithCriteria ( criteria ) . count ( ) ;
}
public long countAllDoied ( ) {
DataManagementPlanCriteria criteria = new DataManagementPlanCriteria ( ) ;
criteria . setHasDoi ( true ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getDmpDao ( ) . getWithCriteria ( criteria ) . count ( ) ;
}
public long countAllResearchers ( ) {
ResearcherCriteria criteria = new ResearcherCriteria ( ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getResearcherDao ( ) . getWithCriteria ( criteria ) . count ( ) ;
}
public long countAllProjects ( ) {
ProjectCriteria criteria = new ProjectCriteria ( ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getProjectDao ( ) . getWithCritetia ( criteria ) . count ( ) ;
}
public long countAllFunders ( ) {
FunderCriteria criteria = new FunderCriteria ( ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getFunderDao ( ) . getWithCritetia ( criteria ) . count ( ) ;
}
public long countAllGrants ( ) {
GrantCriteria criteria = new GrantCriteria ( ) ;
return apiContext . getOperationsContext ( ) . getDatabaseRepository ( ) . getGrantDao ( ) . getWithCriteria ( criteria ) . count ( ) ;
}
/ * public DataTableData < DataManagementPlanListingModel > getPublicPaged ( DataManagmentPlanPublicTableRequest dataManagementPlanPublicTableRequest , String fieldsGroup , Principal principal ) throws Exception {
dataManagementPlanPublicTableRequest . setQuery ( databaseRepository . getDmpDao ( ) . asQueryable ( ) . withHint ( HintedModelFactory . getHint ( DataManagementPlanListingModel . class ) ) ) ;
QueryableList < DMP > items = dataManagementPlanPublicTableRequest . applyCriteria ( ) ;