/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.apidocs.model;
import com.emc.apidocs.Utils;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Describes an API service
*/
public class ApiService {
public String packageName;
public List<String> readRoles = new ArrayList<String>();
public List<String> writeRoles = new ArrayList<String>();
public List<String> readAcls = new ArrayList<String>();
public List<String> writeAcls = new ArrayList<String>();
public String javaClassName;
public List<ApiMethod> methods = new ArrayList<ApiMethod>();
public String description;
public String path;
public String titleOverride;
public boolean isDeprecated;
public String deprecatedMessage = "";
public void addMethod(ApiMethod method) {
methods.add(method);
}
public String getFqJavaClassName() {
return packageName + "." + javaClassName;
}
public String getOverviewFileName() {
return javaClassName.replaceAll("\\.", "_") + "_" + getPackageHash() + "_overview.html";
}
public String getNewMethodsFileName() {
return javaClassName.replaceAll("\\.", "_") + "_" + getPackageHash() + "_newMethodsOverview.html";
}
public String getRemovedMethodsFileName() {
return javaClassName.replaceAll("\\.", "_") + "_" + getPackageHash() + "_removedMethodsOverview.html";
}
public String getModifiedMethodsFileName() {
return javaClassName.replaceAll("\\.", "_") + "_" + getPackageHash() + "_modifiedMethodsOverview.html";
}
public String getModifiedMethodFileName(String methodName) {
return javaClassName.replaceAll("\\.", "_") + "_" + getPackageHash() + "_modifiedMethod_" + methodName.replaceAll("\\.", "_")
+ ".html";
}
public String getPackageHash() {
return DigestUtils.md5Hex(packageName);
}
public String getTitle() {
if (titleOverride != null) {
return titleOverride;
}
String splitCamel = Utils.splitCamelCase(javaClassName);
// Fix common prefix issues caused by camel splitting
if (splitCamel.startsWith("S 3")) {
splitCamel = "S3" + splitCamel.substring(3);
}
else if (splitCamel.startsWith("Un ")) {
splitCamel = "Un" + splitCamel.substring(3);
}
// Strip off Service
if (splitCamel.endsWith(" Service")) {
int start = splitCamel.indexOf(" Service");
splitCamel = splitCamel.substring(0, start);
}
return Utils.upperCaseFirstChar(splitCamel);
}
public void addReadRole(String role) {
readRoles.add(role);
}
public void addWriteRole(String role) {
writeRoles.add(role);
}
public void addReadAcl(String acl) {
readAcls.add(acl);
}
public void addWriteAcl(String acl) {
writeAcls.add(acl);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ApiService that = (ApiService) o;
if (javaClassName != null ? !javaClassName.equals(that.javaClassName) : that.javaClassName != null) {
return false;
}
if (packageName != null ? !packageName.equals(that.packageName) : that.packageName != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = packageName != null ? packageName.hashCode() : 0;
result = 31 * result + (javaClassName != null ? javaClassName.hashCode() : 0);
return result;
}
}