/* * Copyright (c) 2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.apidiff; import com.emc.storageos.apidiff.serializer.AbstractSerializer; import com.emc.storageos.apidiff.serializer.HtmlSerializer; import com.emc.storageos.apidiff.serializer.HtmlSerializerMultiPages; import com.emc.storageos.apidiff.util.Pair; import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Main class to generate API differences page */ public class Main { public static Map<String, List<Pair<String, String>>> serviceNamingMap = new HashMap<String, List<Pair<String, String>>>(); public static void loadProperties(final String fileName) { try { String serviceName = null; for (String line : IOUtils.readLines(new FileInputStream(fileName))) { String lineStr = line.trim(); if (lineStr.length() == 0 || lineStr.startsWith(Constants.COMMENT_MARKER)) { continue; } String[] items = lineStr.split(Constants.TITLE_MARKER); if (items[0].length() == 0) { serviceName = items[1]; } else if (serviceName != null && items[1].length() > 0) { List<Pair<String, String>> serviceList = serviceNamingMap.get(serviceName); if (serviceList == null) { serviceList = new ArrayList<Pair<String, String>>(); serviceNamingMap.put(serviceName, serviceList); } serviceList.add(new Pair<String, String>(items[0], items[1])); } } } catch (Exception e) { throw new RuntimeException("Error reading Group File " + fileName, e); } // System.out.println("Service Naming Map Size: "+serviceNamingMap.size()); } private static void usage() { System.out.println("Apidiff is a simple tool to compute REST API differences between two ViPR version."); System.out.println("Arguments: "); System.out.println(" <old-api-folder>: the folder stores old version of REST APIs"); System.out.println(" <new-api-folder>: the folder stores new version of REST APIs"); System.out.println(" [output folder]: the folder stores output diff file, if non, program will use <new-api-folder>"); System.out.println("Example:"); System.out.println(" java -cp .:... com.emc.storageos.apidiff.Main /tmp/oldApis /tmp/newApis /tmp/output"); System.exit(-1); } public static void main(String[] args) { System.out.println("Arguments: " + Arrays.toString(args)); if (args.length < 2) { usage(); } File oldFolder = new File(args[0]); if (!oldFolder.exists() || !oldFolder.isDirectory()) { usage(); } File newFolder = new File(args[1]); if (!newFolder.exists() || !newFolder.isDirectory()) { usage(); } File outputFolder; if (args.length < 3) { outputFolder = newFolder; } else { outputFolder = new File(args[2]); if (!outputFolder.isDirectory()) { outputFolder.delete(); } if (!outputFolder.exists()) { outputFolder.mkdirs(); } } loadProperties(oldFolder.getAbsolutePath() + "/ApiReferenceGrouping.txt"); List<ServiceCatalogDiff> diffList = DiffGenerator.generate(oldFolder, newFolder); AbstractSerializer serializer = new HtmlSerializer(diffList, outputFolder); serializer.output(); System.out.println("Finished: " + serializer.getFile().getAbsolutePath()); serializer = new HtmlSerializerMultiPages(diffList, outputFolder); serializer.output(); System.out.println("Finished: " + serializer.getFile().getAbsolutePath()); System.out.println("The presentation page includes: summary(API added, removed and changed" + " number), API component list and API change details(compare)"); } }