gcube-cms-suite/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/MappingObject.java

46 lines
1.9 KiB
Java

package org.gcube.application.cms.sdi.model;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.plugins.faults.InvalidProfileException;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.ArrayList;
import java.util.List;
@Data
@Slf4j
public class MappingObject {
private String name;
private String type;
private String path;
public void validate() throws InvalidProfileException {
if (name == null) throw new InvalidProfileException("Invalid mapping " + this + " : name is null");
if (type == null) throw new InvalidProfileException("Invalid mapping " + this + " : type is null");
if (path == null) throw new InvalidProfileException("Invalid mapping " + this + " : path is null");
}
public static List<MappingObject> getMappingsFromUCD(UseCaseDescriptor ucd, String handlerID) throws InvalidProfileException {
log.debug("UseCaseDescriptor {} : Evaluating Index schema.. ", ucd.getId());
HandlerDeclaration handler = ucd.getHandlersMapByID().get(handlerID).get(0);
log.trace("Handler is {} ",handler);
Document profileConfiguration = handler.getConfiguration();
List mappingObjs= profileConfiguration.get("explicitFieldMapping",List.class);
log.trace("Loading mappings from useCaseDescriptor.. ");
List<MappingObject> mappingObjects= new ArrayList<>();
if(mappingObjs!=null){
for (Object mappingObj : mappingObjs) {
log.trace("Mapping is {} ",mappingObj);
MappingObject m = Serialization.convert(mappingObj,MappingObject.class);
m.validate();
mappingObjects.add(m);
}
}
return mappingObjects;
}
}