diff --git a/solidify-index-search-remote/src/main/java/ch/unige/solidify/service/rest/abstractservice/IndexMetadataRemoteResourceService.java b/solidify-index-search-remote/src/main/java/ch/unige/solidify/service/rest/abstractservice/IndexMetadataRemoteResourceService.java index 5a048760ac2f4888054cf60617ecc474ca5d4afc..7ff1a8c875cdec5e5c94f4757205e69313a4786b 100644 --- a/solidify-index-search-remote/src/main/java/ch/unige/solidify/service/rest/abstractservice/IndexMetadataRemoteResourceService.java +++ b/solidify-index-search-remote/src/main/java/ch/unige/solidify/service/rest/abstractservice/IndexMetadataRemoteResourceService.java @@ -9,12 +9,12 @@ * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 2 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-2.0.html>. @@ -31,6 +31,7 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.util.UriComponentsBuilder; @@ -72,19 +73,6 @@ public abstract class IndexMetadataRemoteResourceService<T extends IndexMetadata return this.restClientService.headResource(url); } - public boolean updateIndexMetadata(String id, T t) { - try { - this.restClientService.patchResource( - this.getIndexUrl() + "/" + id, - t, - this.indexResourceClass); - } catch (SolidifyResourceNotFoundException | SolidifyRestException e) { - log.error("Error in updating index (" + id + ")", e); - return false; - } - return true; - } - public T getIndexMetadata(String resId) { this.restClientService.checkResId(resId); String url = this.getIndexUrl() + "/" + resId; @@ -115,28 +103,54 @@ public abstract class IndexMetadataRemoteResourceService<T extends IndexMetadata return this.restClientService.postResourcesList(url, searchConditions, this.indexResourceClass, pageable); } - public boolean deleteIndexMetadata(String id) { + public boolean indexMetadata(List<T> metadataList) { + boolean result = true; + long count = 0; + for (T metadata : metadataList) { + log.debug("Creating index metadata document: {}) {} {}", ++count, metadata.getIndex(), metadata.getResId()); + result = result && this.indexMetadata(metadata); + } + return result; + } + + public boolean indexMetadata(T metadata) { + HttpStatusCode statusCode = this.headIndexMetadata(metadata.getResId()); + if (statusCode == HttpStatus.OK) { + return this.updateIndexMetadata(metadata); + } else { + return this.createIndexMetadata(metadata); + } + } + + public boolean createIndexMetadata(T metadata) { try { - this.restClientService.deleteResource(this.getIndexUrl() + "/" + id); + IndexMetadata res = this.restClientService.postResource(this.getIndexUrl(), metadata, this.indexResourceClass); + if (res == null) { + return false; + } + } catch (SolidifyResourceNotFoundException | SolidifyRestException e) { - log.error("Error in deleting metadata index (" + id + ")", e); + log.error("Error in indexing (" + metadata.getResId() + ")", e); return false; } return true; } - public boolean createIndexMetadata(IndexMetadata md) { + public boolean updateIndexMetadata(T metadata) { try { - IndexMetadata res = this.restClientService.postResource( - this.getIndexUrl(), - md, - IndexMetadata.class); - if (res == null) { - return false; - } + this.restClientService.patchResource(this.getIndexUrl() + "/" + metadata.getResId(), metadata, this.indexResourceClass); + } catch (SolidifyResourceNotFoundException | SolidifyRestException e) { + log.error("Error in updating index (" + metadata.getResId() + ")", e); + return false; + } + return true; + } + public boolean deleteIndexMetadata(String id) { + try { + this.restClientService.deleteResource(this.getIndexUrl() + "/" + id); } catch (SolidifyResourceNotFoundException | SolidifyRestException e) { - log.error("Error in indexing (" + md.getResId() + ")", e); + log.error("Error in deleting metadata index (" + id + ")", e); return false; } return true; diff --git a/solidify-index-service/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java b/solidify-index-service/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java index 833d862cfba9f339228f6bbb9fc0ddacb1a5364e..9c4d6ca1885e89ade1421c98072c37ab884d0896 100644 --- a/solidify-index-service/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java +++ b/solidify-index-service/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java @@ -355,7 +355,7 @@ public abstract class ElasticsearchService<T extends IndexMetadata> extends Inde .document(indexEntry.getMetadata()); try { final IndexResponse response = this.esClient.index(builder.build()); - if (response.result() == Result.Created) { + if (response.result() == Result.Created || response.result() == Result.Updated) { return indexEntry; } else { throw new SolidifyRuntimeException( @@ -377,8 +377,8 @@ public abstract class ElasticsearchService<T extends IndexMetadata> extends Inde .doc(indexEntry.getMetadata()); try { UpdateResponse<T> updateResponse = this.esClient.update(updateBuilder.build(), this.getIndexEntryClass()); - if (updateResponse.result() == Result.Updated) { - return updateResponse.get().source(); + if (updateResponse.result() == Result.Updated || updateResponse.result() == Result.NoOp) { + return indexEntry; } else { throw new SolidifyRuntimeException( "The following metadata could not be updated in index '" + this.getIndexName() + "': \n\n" + indexEntry.getMetadata()