blob: 42c7e52d7326b8ef741003d38b421938cfe45098 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 - 2018 Orange.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* BAREAU Cyrille <cyrille.bareau@orange.com>,
* BONNARDEL Gregory <gbonnardel.ext@orange.com>,
*******************************************************************************/
package org.eclipse.om2m.persistence.mongodb.util;
import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.regex;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.eclipse.om2m.commons.entities.UriMapperEntity;
import org.eclipse.om2m.commons.resource.FilterCriteria;
import org.eclipse.om2m.persistence.mongodb.Constants;
import org.eclipse.om2m.persistence.mongodb.DBServiceImpl;
import org.eclipse.om2m.persistence.service.util.ComplexFindUtil;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCursor;
public class ComplexFindUtilImpl implements ComplexFindUtil, Constants {
private static final ComplexFindUtilImpl INSTANCE = new ComplexFindUtilImpl();
private ComplexFindUtilImpl() {
}
public static ComplexFindUtilImpl getInstance() {
return INSTANCE;
}
@Override
public List<UriMapperEntity> getChildUrisDis(String rootUri, FilterCriteria filter) {
List<UriMapperEntity> uris = new ArrayList<>();
// retrieve rootUri document
Document rootDocument = DBServiceImpl.getInstance().getResourceCollection()
.find(eq(RES_ID, rootUri)).first();
// rootUri exists ?
if (rootDocument == null) {
return uris;
}
// at this point, we are sure that rootDocument is not null
// retrieve hierarchicalUri
String hierarchicalUri = rootDocument.getString(HIERARCHICAL_URI);
// check hierarchical uri
if (hierarchicalUri == null) {
return uris;
}
Bson requestFilter = regex(HIERARCHICAL_URI, Pattern.compile(hierarchicalUri + "*"));
if (filter.getResourceType() != null) {
requestFilter = and(requestFilter, eq(RES_TYPE, filter.getResourceType().intValue()));
}
FindIterable<Document> elements = DBServiceImpl.getInstance().getResourceCollection()
.find(requestFilter);
for (MongoCursor<Document> cursor = elements.iterator(); cursor.hasNext();) {
Document element = cursor.next();
UriMapperEntity uriMapperEntity = new UriMapperEntity();
uriMapperEntity.setHierarchicalUri(element.getString(HIERARCHICAL_URI));
uriMapperEntity.setNonHierarchicalUri(element.getString(RES_ID));
uriMapperEntity.setResourceType(element.getInteger(RES_TYPE));
uris.add(uriMapperEntity);
}
return uris;
}
}