Skip to content

Commit

Permalink
Merge methods of root resources. fixes ryankennedy#74
Browse files Browse the repository at this point in the history
  • Loading branch information
enriquerodbe committed Aug 10, 2014
1 parent ea650c1 commit 37d0761
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import java.util.zip.ZipInputStream;

import static com.google.common.collect.Maps.uniqueIndex;
import static com.hypnoticocelot.jaxrs.doclet.parser.ParserHelper.mergeDeclarations;

import com.hypnoticocelot.jaxrs.doclet.ServiceDoclet;
import java.io.FileInputStream;

Expand Down Expand Up @@ -46,7 +48,9 @@ public String apply(Model model) {
});
// The idea (and need) for the declaration is that "/foo" and "/foo/annotated" are stored in separate
// Api classes but are part of the same resource.
declarations.add(new ApiDeclaration(options.getApiVersion(), options.getApiBasePath(), classParser.getRootPath(), apis, models));
mergeDeclarations(declarations,
new ApiDeclaration(options.getApiVersion(), options.getApiBasePath(),
classParser.getRootPath(), apis, models));
}
writeApis(declarations);
return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.hypnoticocelot.jaxrs.doclet.parser;

import com.hypnoticocelot.jaxrs.doclet.model.Api;
import com.hypnoticocelot.jaxrs.doclet.model.ApiDeclaration;
import com.hypnoticocelot.jaxrs.doclet.model.Model;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class ParserHelper {

public static Api findApiWithSamePath(Collection<Api> apis, Api api) {
for (Api a : apis) {
if (a.getPath().equals(api.getPath())) {
return a;
}
}
return null;
}

public static void mergeApis(Collection<Api> apis, Collection<Api> apis1) {
for (Api api : apis1) {
Api samePathApi = findApiWithSamePath(apis, api);
if (samePathApi == null) {
apis.add(api);
} else {
samePathApi.getOperations().addAll(api.getOperations());
}
}
}

public static ApiDeclaration findDeclarationWithSamePath(Collection<ApiDeclaration> declarations,
ApiDeclaration declaration) {
for (ApiDeclaration d : declarations) {
if (d.getResourcePath().equals(declaration.getResourcePath())) {
return d;
}
}
return null;
}

public static void mergeDeclarations(Collection<ApiDeclaration> declarations, ApiDeclaration declaration) {
ApiDeclaration samePathDeclaration = findDeclarationWithSamePath(declarations, declaration);
if (samePathDeclaration == null) {
declarations.add(declaration);
return;
}

declarations.remove(samePathDeclaration);
mergeApis(samePathDeclaration.getApis(), declaration.getApis());
Map<String, Model> models = new HashMap<>(samePathDeclaration.getModels());
models.putAll(declaration.getModels());
declarations.add(new ApiDeclaration(declaration.getApiVersion(),
declaration.getBasePath(), declaration.getResourcePath(), samePathDeclaration.getApis(), models));
}
}

0 comments on commit 37d0761

Please sign in to comment.