import pl.edu.icm.synat.api.services.store.StatelessStore import pl.edu.icm.synat.api.services.store.model.RecordConditions import pl.edu.icm.synat.process.common.enrich.impl.sonca.SoncaMetadataEnricher import org.springframework.web.client.RestTemplate import pl.edu.icm.model.bwmeta.y.YContentEntry; import pl.edu.icm.model.bwmeta.y.YContentFile; import pl.edu.icm.model.bwmeta.y.YDescription; import pl.edu.icm.model.bwmeta.y.YElement; import pl.edu.icm.model.bwmeta.y.YExportable; import pl.edu.icm.model.bwmeta.y.YLanguage; import pl.edu.icm.model.transformers.bwmeta.y.BwmetaTransformerConstants; import pl.edu.icm.synat.api.services.index.fulltext.FulltextIndexService; import pl.edu.icm.synat.api.services.index.fulltext.query.FulltextSearchQuery; import pl.edu.icm.synat.api.services.index.fulltext.query.criteria.SearchOperator; import pl.edu.icm.synat.api.services.index.fulltext.query.criteria.impl.FieldCriterion; import pl.edu.icm.synat.api.services.index.fulltext.query.criteria.impl.FieldRangeCriterion; import pl.edu.icm.synat.api.services.index.fulltext.query.criteria.impl.BooleanCriterion; import pl.edu.icm.synat.api.services.index.fulltext.query.format.FieldRequest; import pl.edu.icm.synat.api.services.index.fulltext.query.format.ResultsFormat; import pl.edu.icm.synat.api.services.index.fulltext.result.FulltextSearchResult; import pl.edu.icm.synat.api.services.index.fulltext.result.FulltextSearchResults; import pl.edu.icm.synat.api.services.index.fulltext.result.ResultField; import pl.edu.icm.synat.api.services.store.model.RecordId; import pl.edu.icm.synat.process.common.repository.DocumentRepository; import pl.edu.icm.synat.process.common.repository.DefaultDocumentRepositoryBuilder; import pl.edu.icm.synat.process.common.model.api.Document; import pl.edu.icm.synat.process.common.model.api.NativeDocument; store = serviceUtils.getService('Store', StatelessStore.class) types = new ArrayList(); bwmetaDeserializer = new pl.edu.icm.synat.application.model.bwmeta.utils.BWMetaDeserializerImpl() recordBwmetaExtractor = new pl.edu.icm.synat.logic.model.utils.impl.RecordBwmetaExtractorImpl(bwmetaDeserializer) iter =1; enricher = new SoncaMetadataEnricher(); enricher.setUrl("http://synat2.vls.icm.edu.pl/ext-sonca/webresources/oecd"); enricher.setRestTemplate(new RestTemplate()); transformer = new pl.edu.icm.synat.process.common.enrich.impl.sonca.SoncaMetadataTransformer(); transformer.setMetadataEnricher(enricher); documentRepository = DefaultDocumentRepositoryBuilder.buildRepository(store); errors = 0; counter = 0; done = 0; FulltextIndexService index = (FulltextIndexService)serviceUtils.getService("Index", FulltextIndexService.class); batchSize =1000; resultsFormat = new ResultsFormat(new FieldRequest(pl.edu.icm.synat.logic.index.publication.CollectionIndexFieldConstants.FIELD_EXID, true)); FulltextSearchQuery searchQuery = null; searchQuery = new FulltextSearchQuery(0, batchSize, resultsFormat ,new FieldCriterion("level", "bwmeta1.level.hierarchy_Journal_Article", SearchOperator.AND) ,new FieldCriterion("dataset", "AGRO", SearchOperator.AND) ); results = index.performSearch(searchQuery).getResults(); println "SIZE " + results.size(); skip = 0 while(results.size()>0){ skip += batchSize; for(result in results){ def id = result.getDocId(); checkSingle(id); } searchQuery.setFirst(skip); searchQuery.setSize(batchSize); results = index.performSearch(searchQuery).getResults(); } def checkSingle(id) { NativeDocument nativeDoc = documentRepository.fetchDocument(id); if (nativeDoc instanceof Document) { Document doc = (Document) nativeDoc; YExportable yExportable = doc.getMetadata(); if (null != yExportable && yExportable instanceof YElement) { YElement element = (YElement)yExportable; try { counter++; if (transformer.modify(element)) { nativeDoc.setMetadata(element); documentRepository.storeDocument(nativeDoc, null); done++; System.out.println("Done: Err("+errors+"), Counter("+counter+"), Done("+done+"): "+element.getId()); } } catch (Exception e) { errors++; System.out.println("Err("+errors+"), Counter("+counter+"), Done("+done+"): "+element.getId()+", "+e.getMessage()); } } } }