/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.airavata.registry.core.replica.catalog.utils;
import org.apache.airavata.model.data.replica.*;
import org.apache.airavata.registry.core.replica.catalog.model.DataProduct;
import org.apache.airavata.registry.core.replica.catalog.model.DataProductMetaData;
import org.apache.airavata.registry.core.replica.catalog.model.DataReplicaLocation;
import org.apache.airavata.registry.core.replica.catalog.model.DataReplicaMetaData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class ThriftDataModelConversion {
private final static Logger logger = LoggerFactory.getLogger(ThriftDataModelConversion.class);
public static DataProductModel getDataProductModel(DataProduct dataProduct){
if (dataProduct != null) {
DataProductModel dataProductModel = new DataProductModel();
dataProductModel.setProductUri(dataProduct.getProductUri());
dataProductModel.setGatewayId(dataProduct.getGatewayId());
dataProductModel.setParentProductUri(dataProduct.getParentProductUri());
dataProductModel.setProductName(dataProduct.getProductName());
if(dataProduct.getDataProductType() != null)
dataProductModel.setDataProductType(DataProductType.valueOf(dataProduct.getDataProductType()));
else
dataProductModel.setDataProductType(DataProductType.FILE);
dataProductModel.setProductDescription(dataProduct.getProductDescription());
dataProductModel.setOwnerName(dataProduct.getOwnerName());
dataProductModel.setProductSize(dataProduct.getProductSize());
if(dataProduct.getCreationTime() != null)
dataProductModel.setCreationTime(dataProduct.getCreationTime().getTime());
if(dataProduct.getLastModifiedTime() != null)
dataProductModel.setLastModifiedTime(dataProduct.getLastModifiedTime().getTime());
dataProductModel.setProductMetadata(getResourceMetaData(dataProduct.getDataProductMetaData()));
if(dataProduct.getDataReplicaLocations() != null){
ArrayList<DataReplicaLocationModel> dataReplicaLocationModels = new ArrayList<>();
dataProduct.getDataReplicaLocations().stream().forEach(r->dataReplicaLocationModels
.add(getDataReplicaLocationModel(r)));
dataProductModel.setReplicaLocations(dataReplicaLocationModels);
}
return dataProductModel;
}
return null;
}
public static DataProduct getDataProduct(DataProductModel dataProductModel){
if(dataProductModel != null){
DataProduct dataProduct = new DataProduct();
return getUpdatedDataProduct(dataProductModel, dataProduct);
}
return null;
}
public static DataProduct getUpdatedDataProduct(DataProductModel dataProductModel, DataProduct dataProduct){
dataProduct.setProductUri(dataProductModel.getProductUri());
dataProduct.setGatewayId(dataProductModel.getGatewayId());
dataProduct.setProductName(dataProductModel.getProductName());
dataProduct.setParentProductUri(dataProductModel.getParentProductUri());
if(dataProductModel.getDataProductType() != null)
dataProduct.setDataProductType(dataProductModel.getDataProductType().toString());
else
dataProduct.setDataProductType(DataProductType.FILE.toString());
dataProduct.setProductDescription(dataProductModel.getProductDescription());
dataProduct.setOwnerName(dataProductModel.getOwnerName());
dataProduct.setProductSize(dataProductModel.getProductSize());
if(dataProductModel.getCreationTime() > 0)
dataProduct.setCreationTime(new Timestamp(dataProductModel.getCreationTime()));
if(dataProductModel.getLastModifiedTime() > 0)
dataProduct.setLastModifiedTime(new Timestamp(dataProductModel.getLastModifiedTime()));
ArrayList<DataProductMetaData> dataProductMetaData = new ArrayList<>();
if(dataProductModel.getProductMetadata() != null) {
dataProductModel.getProductMetadata().keySet().stream().forEach(k -> {
String v = dataProductModel.getProductMetadata().get(k);
DataProductMetaData temp = new DataProductMetaData();
temp.setProductUri(dataProduct.getProductUri());
temp.setKey(k);
temp.setValue(v);
dataProductMetaData.add(temp);
});
dataProduct.setDataProductMetaData(dataProductMetaData);
}
if(dataProductModel.getReplicaLocations() != null){
ArrayList<DataReplicaLocation> dataReplicaLocations = new ArrayList<>();
dataProductModel.getReplicaLocations().stream().forEach(r->{
DataReplicaLocation dataReplicaLocationModel = getDataReplicaLocation(r);
dataReplicaLocationModel.setProductUri(dataProductModel.getProductUri());
dataReplicaLocations.add(dataReplicaLocationModel);
});
dataProduct.setDataReplicaLocations(dataReplicaLocations);
}
return dataProduct;
}
public static DataReplicaLocationModel getDataReplicaLocationModel(DataReplicaLocation replicaLocation){
if (replicaLocation != null) {
DataReplicaLocationModel replicaLocationModel = new DataReplicaLocationModel();
replicaLocationModel.setReplicaId(replicaLocation.getReplicaId());
replicaLocationModel.setProductUri(replicaLocation.getProductUri());
replicaLocationModel.setReplicaName(replicaLocation.getReplicaName());
replicaLocationModel.setReplicaDescription(replicaLocation.getReplicaDescription());
replicaLocationModel.setStorageResourceId(replicaLocation.getStorageResourceId());
if(replicaLocation.getValidUntilTime() != null)
replicaLocationModel.setValidUntilTime(replicaLocation.getValidUntilTime().getTime());
replicaLocationModel.setFilePath(replicaLocation.getFilePath());
if(replicaLocation.getCreationTime() != null)
replicaLocationModel.setCreationTime(replicaLocation.getCreationTime().getTime());
if(replicaLocation.getLastModifiedTime() != null)
replicaLocationModel.setLastModifiedTime(replicaLocation.getLastModifiedTime().getTime());
if(replicaLocation.getReplicaLocationCategory() != null)
replicaLocationModel.setReplicaLocationCategory(ReplicaLocationCategory.valueOf(replicaLocation
.getReplicaLocationCategory().toString()));
if(replicaLocation.getReplicaPersistentType() != null)
replicaLocationModel.setReplicaPersistentType(ReplicaPersistentType.valueOf(replicaLocation
.getReplicaPersistentType().toString()));
replicaLocationModel.setReplicaMetadata(getReplicaMetaData(replicaLocation.getDataReplicaMetaData()));
return replicaLocationModel;
}
return null;
}
public static DataReplicaLocation getDataReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel){
if(dataReplicaLocationModel != null){
DataReplicaLocation dataReplicaLocation = new DataReplicaLocation();
return getUpdatedDataReplicaLocation(dataReplicaLocationModel, dataReplicaLocation);
}
return null;
}
public static DataReplicaLocation getUpdatedDataReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel,
DataReplicaLocation dataReplicaLocation){
dataReplicaLocation.setReplicaId(dataReplicaLocationModel.getReplicaId());
dataReplicaLocation.setProductUri(dataReplicaLocationModel.getProductUri());
dataReplicaLocation.setReplicaName(dataReplicaLocationModel.getReplicaName());
dataReplicaLocation.setReplicaDescription(dataReplicaLocationModel.getReplicaDescription());
dataReplicaLocation.setStorageResourceId(dataReplicaLocationModel.getStorageResourceId());
dataReplicaLocation.setFilePath(dataReplicaLocationModel.getFilePath());
if(dataReplicaLocationModel.getValidUntilTime() > 0)
dataReplicaLocation.setValidUntilTime(new Timestamp(dataReplicaLocationModel.getValidUntilTime()));
if(dataReplicaLocationModel.getCreationTime() > 0)
dataReplicaLocation.setCreationTime(new Timestamp(dataReplicaLocationModel.getCreationTime()));
if(dataReplicaLocationModel.getLastModifiedTime() > 0)
dataReplicaLocation.setLastModifiedTime(new Timestamp(dataReplicaLocationModel.getLastModifiedTime()));
if(dataReplicaLocationModel.getReplicaLocationCategory() != null)
dataReplicaLocation.setReplicaLocationCategory(dataReplicaLocationModel.getReplicaLocationCategory().toString());
if(dataReplicaLocationModel.getReplicaPersistentType() != null)
dataReplicaLocation.setReplicaPersistentType(dataReplicaLocationModel.getReplicaPersistentType().toString());
ArrayList<DataReplicaMetaData> dataReplicaMetadata = new ArrayList<>();
if(dataReplicaLocation.getDataReplicaMetaData() != null){
dataReplicaLocationModel.getReplicaMetadata().keySet().stream().forEach(k -> {
String v = dataReplicaLocationModel.getReplicaMetadata().get(k);
DataReplicaMetaData temp = new DataReplicaMetaData();
temp.setReplicaId(dataReplicaLocationModel.getProductUri());
temp.setKey(k);
temp.setValue(v);
dataReplicaMetadata.add(temp);
});
dataReplicaLocation.setDataReplicaMetaData(dataReplicaMetadata);
}
return dataReplicaLocation;
}
public static Map<String, String> getResourceMetaData(Collection<DataProductMetaData> dataProductMetaData){
HashMap<String, String> metadata = new HashMap<>();
if(dataProductMetaData!=null && !dataProductMetaData.isEmpty()) {
dataProductMetaData.stream().forEach(m -> metadata.put(m.getKey(),m.getValue()));
}
return metadata;
}
public static Map<String, String> getReplicaMetaData(Collection<DataReplicaMetaData> dataReplicaMetaData){
HashMap<String, String> metadata = new HashMap<>();
if(dataReplicaMetaData!=null && !dataReplicaMetaData.isEmpty()) {
dataReplicaMetaData.stream().forEach(m -> metadata.put(m.getKey(),m.getValue()));
}
return metadata;
}
}