Skip to content

Commit 38673c9

Browse files
committed
Merge pull request #1229 from Helmsdown/relative-refs
Update RefModel, RefParameter and RefProperty to allow relative refs
2 parents 95182e3 + 5829da3 commit 38673c9

File tree

13 files changed

+389
-68
lines changed

13 files changed

+389
-68
lines changed

modules/swagger-core/src/test/scala/models/ModelWithTuple2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class ModelWithTuple2 {
2525
@ApiModelProperty(value = "set of pairs", required = true)
2626
public Set<Pair<String, String>> manyPairs;
2727

28-
@ApiModelProperty(value = "set of pairs wiht complex left", required = true)
28+
@ApiModelProperty(value = "set of pairs with complex left", required = true)
2929
public Set<Pair<ComplexLeft, String>> complexLeft;
3030

3131
static class ComplexLeft {

modules/swagger-models/pom.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<Export-Package>
3737
io.swagger.models.parameters,
3838
io.swagger.models.properties,
39+
io.swagger.models.refs,
3940
io.swagger.models
4041
</Export-Package>
4142
</instructions>
@@ -60,5 +61,23 @@
6061
<version>${project.parent.version}</version>
6162
<scope>compile</scope>
6263
</dependency>
64+
<dependency>
65+
<groupId>org.scalatest</groupId>
66+
<artifactId>scalatest_2.10</artifactId>
67+
<scope>test</scope>
68+
</dependency>
69+
<dependency>
70+
<groupId>junit</groupId>
71+
<artifactId>junit</artifactId>
72+
<scope>test</scope>
73+
</dependency>
6374
</dependencies>
75+
<properties>
76+
<!-- TODO increase coverage -->
77+
<validation-api-version>1.1.0.Final</validation-api-version>
78+
<coverage.complexity.minimum>0.00</coverage.complexity.minimum>
79+
<coverage.line.minimum>0.0</coverage.line.minimum>
80+
<!-- Setting this to a really high number since this module has almost no coverage -->
81+
<coverage.missed.classes>100</coverage.missed.classes>
82+
</properties>
6483
</project>

modules/swagger-models/src/main/java/io/swagger/models/RefModel.java

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import com.fasterxml.jackson.annotation.JsonIgnore;
44
import io.swagger.models.properties.Property;
5+
import io.swagger.models.refs.GenericRef;
6+
import io.swagger.models.refs.RefConstants;
7+
import io.swagger.models.refs.RefFormat;
8+
import io.swagger.models.refs.RefType;
59

610
import java.util.Map;
711

812
public class RefModel implements Model {
9-
// internally, the ref value is never fully qualified
10-
private String ref;
13+
private GenericRef genericRef;
1114
private String description;
1215
private ExternalDocs externalDocs;
1316
private Map<String, Property> properties;
@@ -21,7 +24,7 @@ public RefModel(String ref) {
2124
}
2225

2326
public RefModel asDefault(String ref) {
24-
this.set$ref("#/definitions/" + ref);
27+
this.set$ref(RefConstants.INTERNAL_DEFINITION_PREFIX + ref);
2528
return this;
2629
}
2730

@@ -46,27 +49,20 @@ public void setProperties(Map<String, Property> properties) {
4649

4750
@JsonIgnore
4851
public String getSimpleRef() {
49-
if (ref.indexOf("#/definitions/") == 0) {
50-
return ref.substring("#/definitions/".length());
51-
} else {
52-
return ref;
53-
}
52+
return genericRef.getSimpleRef();
5453
}
5554

5655
public String get$ref() {
57-
if (ref.startsWith("http")) {
58-
return ref;
59-
} else {
60-
return "#/definitions/" + ref;
61-
}
56+
return genericRef.getRef();
6257
}
6358

6459
public void set$ref(String ref) {
65-
if (ref.indexOf("#/definitions/") == 0) {
66-
this.ref = ref.substring("#/definitions/".length());
67-
} else {
68-
this.ref = ref;
69-
}
60+
this.genericRef = new GenericRef(RefType.DEFINITION, ref);
61+
}
62+
63+
@JsonIgnore
64+
public RefFormat getRefFormat() {
65+
return this.genericRef.getFormat();
7066
}
7167

7268
@JsonIgnore
@@ -89,7 +85,7 @@ public void setExternalDocs(ExternalDocs value) {
8985

9086
public Object clone() {
9187
RefModel cloned = new RefModel();
92-
cloned.ref = this.ref;
88+
cloned.genericRef = this.genericRef; //GenericRef is an immutable class
9389
cloned.description = this.description;
9490
cloned.properties = this.properties;
9591
cloned.example = this.example;
@@ -108,7 +104,7 @@ public int hashCode() {
108104
+ ((externalDocs == null) ? 0 : externalDocs.hashCode());
109105
result = prime * result
110106
+ ((properties == null) ? 0 : properties.hashCode());
111-
result = prime * result + ((ref == null) ? 0 : ref.hashCode());
107+
result = prime * result + ((genericRef == null) ? 0 : genericRef.hashCode());
112108
return result;
113109
}
114110

@@ -152,11 +148,11 @@ public boolean equals(Object obj) {
152148
} else if (!properties.equals(other.properties)) {
153149
return false;
154150
}
155-
if (ref == null) {
156-
if (other.ref != null) {
151+
if (genericRef == null) {
152+
if (other.genericRef != null) {
157153
return false;
158154
}
159-
} else if (!ref.equals(other.ref)) {
155+
} else if (!genericRef.equals(other.genericRef)) {
160156
return false;
161157
}
162158
return true;
@@ -165,11 +161,11 @@ public boolean equals(Object obj) {
165161
@Override
166162
@JsonIgnore
167163
public String getReference() {
168-
return ref;
164+
return genericRef.getRef();
169165
}
170166

171167
@Override
172168
public void setReference(String reference) {
173-
this.ref = reference;
169+
this.genericRef = new GenericRef(RefType.DEFINITION, reference);
174170
}
175171
}

modules/swagger-models/src/main/java/io/swagger/models/parameters/RefParameter.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package io.swagger.models.parameters;
22

33
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import io.swagger.models.refs.GenericRef;
5+
import io.swagger.models.refs.RefConstants;
6+
import io.swagger.models.refs.RefFormat;
7+
import io.swagger.models.refs.RefType;
48

59
public class RefParameter extends AbstractParameter implements Parameter {
6-
String ref;
10+
private GenericRef genericRef;
711

812
public RefParameter(String ref) {
913
set$ref(ref);
@@ -18,7 +22,7 @@ public static boolean isType(String type, String format) {
1822
}
1923

2024
public RefParameter asDefault(String ref) {
21-
this.set$ref("#/parameters/" + ref);
25+
this.set$ref(RefConstants.INTERNAL_PARAMETER_PREFIX + ref);
2226
return this;
2327
}
2428

@@ -28,19 +32,16 @@ public RefParameter description(String description) {
2832
}
2933

3034
public String get$ref() {
31-
if (ref.startsWith("http")) {
32-
return ref;
33-
} else {
34-
return "#/parameters/" + ref;
35-
}
35+
return genericRef.getRef();
3636
}
3737

3838
public void set$ref(String ref) {
39-
if (ref.indexOf("#/parameters/") == 0) {
40-
this.ref = ref.substring("#/parameters/".length());
41-
} else {
42-
this.ref = ref;
43-
}
39+
this.genericRef = new GenericRef(RefType.PARAMETER, ref);
40+
}
41+
42+
@JsonIgnore
43+
public RefFormat getRefFormat() {
44+
return this.genericRef.getFormat();
4445
}
4546

4647
@Override
@@ -51,18 +52,14 @@ public boolean getRequired() {
5152

5253
@JsonIgnore
5354
public String getSimpleRef() {
54-
if (ref.indexOf("#/parameters/") == 0) {
55-
return ref.substring("#/parameters/".length());
56-
} else {
57-
return ref;
58-
}
55+
return genericRef.getSimpleRef();
5956
}
6057

6158
@Override
6259
public int hashCode() {
6360
final int prime = 31;
6461
int result = super.hashCode();
65-
result = prime * result + ((ref == null) ? 0 : ref.hashCode());
62+
result = prime * result + ((genericRef == null) ? 0 : genericRef.hashCode());
6663
return result;
6764
}
6865

@@ -78,11 +75,11 @@ public boolean equals(Object obj) {
7875
return false;
7976
}
8077
RefParameter other = (RefParameter) obj;
81-
if (ref == null) {
82-
if (other.ref != null) {
78+
if (genericRef == null) {
79+
if (other.genericRef != null) {
8380
return false;
8481
}
85-
} else if (!ref.equals(other.ref)) {
82+
} else if (!genericRef.equals(other.genericRef)) {
8683
return false;
8784
}
8885
return true;

modules/swagger-models/src/main/java/io/swagger/models/properties/RefProperty.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package io.swagger.models.properties;
22

33
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import io.swagger.models.refs.GenericRef;
5+
import io.swagger.models.refs.RefConstants;
6+
import io.swagger.models.refs.RefFormat;
7+
import io.swagger.models.refs.RefType;
48

59
public class RefProperty extends AbstractProperty implements Property {
610
private static final String TYPE = "ref";
7-
String ref;
11+
private GenericRef genericRef;
812

913
public RefProperty() {
1014
setType(TYPE);
@@ -24,7 +28,7 @@ public static boolean isType(String type, String format) {
2428
}
2529

2630
public RefProperty asDefault(String ref) {
27-
this.set$ref("#/definitions/" + ref);
31+
this.set$ref(RefConstants.INTERNAL_DEFINITION_PREFIX + ref);
2832
return this;
2933
}
3034

@@ -46,35 +50,28 @@ public void setType(String type) {
4650
}
4751

4852
public String get$ref() {
49-
if (ref.startsWith("http")) {
50-
return ref;
51-
} else {
52-
return "#/definitions/" + ref;
53-
}
53+
return genericRef.getRef();
5454
}
5555

5656
public void set$ref(String ref) {
57-
if (ref.indexOf("#/definitions/") == 0) {
58-
this.ref = ref.substring("#/definitions/".length());
59-
} else {
60-
this.ref = ref;
61-
}
57+
this.genericRef = new GenericRef(RefType.DEFINITION, ref);
58+
}
59+
60+
@JsonIgnore
61+
public RefFormat getRefFormat() {
62+
return this.genericRef.getFormat();
6263
}
6364

6465
@JsonIgnore
6566
public String getSimpleRef() {
66-
if (ref.indexOf("#/definitions/") == 0) {
67-
return ref.substring("#/definitions/".length());
68-
} else {
69-
return ref;
70-
}
67+
return genericRef.getSimpleRef();
7168
}
7269

7370
@Override
7471
public int hashCode() {
7572
final int prime = 31;
7673
int result = 1;
77-
result = prime * result + ((ref == null) ? 0 : ref.hashCode());
74+
result = prime * result + ((genericRef == null) ? 0 : genericRef.hashCode());
7875
return result;
7976
}
8077

@@ -90,11 +87,11 @@ public boolean equals(Object obj) {
9087
return false;
9188
}
9289
RefProperty other = (RefProperty) obj;
93-
if (ref == null) {
94-
if (other.ref != null) {
90+
if (genericRef == null) {
91+
if (other.genericRef != null) {
9592
return false;
9693
}
97-
} else if (!ref.equals(other.ref)) {
94+
} else if (!genericRef.equals(other.genericRef)) {
9895
return false;
9996
}
10097
return true;

0 commit comments

Comments
 (0)