/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.apidiff;
import com.emc.storageos.apidiff.model.ServiceCatalog;
import com.emc.storageos.apidiff.model.ServiceCatalogBuilder;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Main class to generate diff document
*/
public class DiffGenerator {
private DiffGenerator() {
}
/**
* Generate API differences list for all valid services, such as: apisvc, objcontrollersvc, syssvc and so on.
*
* @param oldFolder
* The folder of old version api files
* @param newFolder
* The folder of new version api files
* @return service diff list
*/
public static List<ServiceCatalogDiff> generate(File oldFolder, File newFolder) {
List<ServiceCatalogDiff> diffList = new ArrayList<ServiceCatalogDiff>();
List<ServiceCatalog> oldApiList = generateRestServiceList(oldFolder);
List<ServiceCatalog> newApiList = generateRestServiceList(newFolder);
for (ServiceCatalog newServiceCatalog : newApiList) {
String serviceName = newServiceCatalog.getServiceName();
boolean found = false;
for (ServiceCatalog oldServiceCatalog : oldApiList) {
if (serviceName.equals(oldServiceCatalog.getServiceName())) {
ServiceCatalogDiff serviceCatalogDiff =
new ServiceCatalogDiff(oldServiceCatalog, newServiceCatalog);
serviceCatalogDiff.generateDiff();
diffList.add(serviceCatalogDiff);
found = true;
break;
}
}
if (!found) {
System.err.println("Can't find original version of"
+ serviceName + "API, please check your file name");
}
}
Collections.sort(diffList, new Comparator<ServiceCatalogDiff>() {
@Override
public int compare(ServiceCatalogDiff o1, ServiceCatalogDiff o2) {
return o1.getNewServiceCatalog().getServiceName().compareTo(
o2.getNewServiceCatalog().getServiceName());
}
});
return diffList;
}
/**
* loads and generates all ServiceCatalogs according to xml files under folder
*
* @param folder
* The folder which includes API xml files
* @return the list of ServiceCatalog
*/
private static List<ServiceCatalog> generateRestServiceList(File folder) {
List<ServiceCatalog> apiList = new ArrayList<ServiceCatalog>();
Collection<File> files = FileUtils.listFiles(folder,
new String[] { Constants.XML_FILE_SUFFIX }, false);
for (File file : files) {
System.out.println("Loading: " + file.getAbsolutePath());
apiList.add(ServiceCatalogBuilder.build(file));
}
if (apiList.isEmpty()) {
return null;
}
return apiList;
}
}