Skip to content

Commit 09ae629

Browse files
authored
Merge branch 'master' into issue269
Signed-off-by: Arthit Suriyawongkul <[email protected]>
2 parents 50f4716 + 54ff230 commit 09ae629

File tree

12 files changed

+178
-72
lines changed

12 files changed

+178
-72
lines changed

pom.xml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<modelVersion>4.0.0</modelVersion>
33
<groupId>org.spdx</groupId>
44
<artifactId>java-spdx-library</artifactId>
5-
<version>2.0.0-RC3-SNAPSHOT</version>
5+
<version>2.0.1-SNAPSHOT</version>
66
<packaging>jar</packaging>
77
<name>java-spdx-library</name>
88
<url>https://github.com/spdx/Spdx-Java-Library</url>
@@ -41,7 +41,7 @@
4141
</distributionManagement>
4242
<properties>
4343
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
44-
<project.build.outputTimestamp>1738392153</project.build.outputTimestamp>
44+
<project.build.outputTimestamp>1745001494</project.build.outputTimestamp>
4545
<maven.compiler.source>8</maven.compiler.source>
4646
<maven.compiler.target>8</maven.compiler.target>
4747
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
@@ -148,20 +148,19 @@
148148
<dependency>
149149
<groupId>org.spdx</groupId>
150150
<artifactId>spdx-java-model-2_X</artifactId>
151-
<version>1.0.0-RC2</version>
151+
<version>1.0.0</version>
152152
</dependency>
153153
<dependency>
154154
<groupId>org.spdx</groupId>
155155
<artifactId>spdx-java-core</artifactId>
156-
<version>1.0.0-RC2</version>
156+
<version>1.0.0</version>
157157
</dependency>
158158
<dependency>
159159
<groupId>org.spdx</groupId>
160160
<artifactId>spdx-java-model-3_0</artifactId>
161-
<version>1.0.0-RC2</version>
161+
<version>1.0.0</version>
162162
</dependency>
163163
</dependencies>
164-
165164
<build>
166165
<resources>
167166
<resource>

src/main/java/org/spdx/library/conversion/Spdx2to3Converter.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
import org.spdx.library.ListedLicenses;
3232
import org.spdx.library.model.v2.SpdxConstantsCompatV2;
3333
import org.spdx.library.model.v2.SpdxCreatorInformation;
34+
import org.spdx.library.model.v2.pointer.ByteOffsetPointer;
35+
import org.spdx.library.model.v2.pointer.LineCharPointer;
36+
import org.spdx.library.model.v2.pointer.StartEndPointer;
3437
import org.spdx.library.model.v3_0_1.ModelObjectV3;
3538
import org.spdx.library.model.v3_0_1.SpdxConstantsV3;
3639
import org.spdx.library.model.v3_0_1.SpdxModelClassFactoryV3;
@@ -1461,21 +1464,29 @@ public Snippet convertAndStore(org.spdx.library.model.v2.SpdxSnippet fromSnippet
14611464
Snippet toSnippet = (Snippet)SpdxModelClassFactoryV3.getModelObject(toModelStore,
14621465
toObjectUri, SpdxConstantsV3.SOFTWARE_SNIPPET, copyManager, true, defaultUriPrefix);
14631466
convertItemProperties(fromSnippet, toSnippet);
1464-
org.spdx.library.model.v2.pointer.StartEndPointer fromByteRange = fromSnippet.getByteRange();
1467+
StartEndPointer fromByteRange = fromSnippet.getByteRange();
14651468
if (Objects.nonNull(fromByteRange)) {
1466-
//noinspection DataFlowIssue
1467-
toSnippet.setByteRange(toSnippet.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1468-
.setBeginIntegerRange(((org.spdx.library.model.v2.pointer.ByteOffsetPointer)fromByteRange.getStartPointer()).getOffset())
1469-
.setEndIntegerRange(((org.spdx.library.model.v2.pointer.ByteOffsetPointer)fromByteRange.getEndPointer()).getOffset())
1470-
.build());
1469+
// noinspection DataFlowIssue
1470+
ByteOffsetPointer startPointer = (ByteOffsetPointer) fromByteRange.getStartPointer();
1471+
ByteOffsetPointer endPointer = (ByteOffsetPointer) fromByteRange.getEndPointer();
1472+
if (Objects.nonNull(startPointer) && Objects.nonNull(endPointer)) {
1473+
toSnippet.setByteRange(toSnippet
1474+
.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1475+
.setBeginIntegerRange(startPointer.getOffset())
1476+
.setEndIntegerRange(endPointer.getOffset()).build());
1477+
}
14711478
}
1472-
Optional<org.spdx.library.model.v2.pointer.StartEndPointer> fromLineRange = fromSnippet.getLineRange();
1479+
Optional<StartEndPointer> fromLineRange = fromSnippet.getLineRange();
14731480
if (fromLineRange.isPresent()) {
1474-
//noinspection DataFlowIssue
1475-
toSnippet.setLineRange(toSnippet.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1476-
.setBeginIntegerRange(((org.spdx.library.model.v2.pointer.LineCharPointer)fromLineRange.get().getStartPointer()).getLineNumber())
1477-
.setEndIntegerRange(((org.spdx.library.model.v2.pointer.LineCharPointer)fromLineRange.get().getEndPointer()).getLineNumber())
1478-
.build());
1481+
// noinspection DataFlowIssue
1482+
LineCharPointer startPointer = (LineCharPointer) fromLineRange.get().getStartPointer();
1483+
LineCharPointer endPointer = (LineCharPointer) fromLineRange.get().getEndPointer();
1484+
if (Objects.nonNull(startPointer) && Objects.nonNull(endPointer)) {
1485+
toSnippet.setLineRange(toSnippet
1486+
.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1487+
.setBeginIntegerRange(startPointer.getLineNumber())
1488+
.setEndIntegerRange(endPointer.getLineNumber()).build());
1489+
}
14791490
}
14801491
toSnippet.setSnippetFromFile(convertAndStore(Objects.requireNonNull(fromSnippet.getSnippetFromFile())));
14811492
return toSnippet;

src/main/java/org/spdx/storage/listedlicense/SpdxListedLicenseModelStore.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ public void removeProperty(String objectUri, PropertyDescriptor propertyDescript
947947
}
948948

949949
@Override
950-
public Stream<TypedValue> getAllItems(String documentUri, @Nullable String typeFilter)
950+
public Stream<TypedValue> getAllItems(@Nullable String documentUri, @Nullable String typeFilter)
951951
throws InvalidSPDXAnalysisException {
952952
listedLicenseModificationLock.writeLock().lock();
953953
try {
@@ -1246,12 +1246,12 @@ public Optional<String> listedExceptionIdCaseSensitive(String exceptionId) {
12461246
}
12471247

12481248
@Override
1249-
public Optional<String> getCaseSensisitiveId(String documentUri, String caseInsensisitiveId) {
1250-
Optional<String> retval = listedLicenseIdCaseSensitive(caseInsensisitiveId);
1249+
public Optional<String> getCaseSensitiveId(String documentUri, String caseInsensitiveId) {
1250+
Optional<String> retval = listedLicenseIdCaseSensitive(caseInsensitiveId);
12511251
if (retval.isPresent()) {
12521252
return retval;
12531253
}
1254-
return listedExceptionIdCaseSensitive(caseInsensisitiveId);
1254+
return listedExceptionIdCaseSensitive(caseInsensitiveId);
12551255
}
12561256

12571257
@Override

src/main/java/org/spdx/storage/listedlicense/SpdxV2ListedLicenseModelStore.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import java.util.Set;
2727
import java.util.stream.Stream;
2828

29+
import javax.annotation.Nullable;
30+
2931
import org.spdx.core.InvalidSPDXAnalysisException;
3032
import org.spdx.core.TypedValue;
3133
import org.spdx.library.model.v2.ModelObjectV2;
@@ -184,7 +186,7 @@ public void removeProperty(String objectUri,
184186
* @see org.spdx.storage.IModelStore#getAllItems(java.lang.String, java.lang.String)
185187
*/
186188
@Override
187-
public Stream<TypedValue> getAllItems(String nameSpace, String typeFilter)
189+
public Stream<TypedValue> getAllItems(@Nullable String nameSpace, @Nullable String typeFilter)
188190
throws InvalidSPDXAnalysisException {
189191
return baseStore.getAllItems(nameSpace, typeFilter).filter(tv -> !tv.getSpecVersion().startsWith("3."));
190192
}
@@ -332,12 +334,12 @@ public IdType getIdType(String objectUri) {
332334
}
333335

334336
/* (non-Javadoc)
335-
* @see org.spdx.storage.IModelStore#getCaseSensisitiveId(java.lang.String, java.lang.String)
337+
* @see org.spdx.storage.IModelStore#getCaseSensitiveId(java.lang.String, java.lang.String)
336338
*/
337339
@Override
338-
public Optional<String> getCaseSensisitiveId(String nameSpace,
339-
String caseInsensisitiveId) {
340-
return baseStore.getCaseSensisitiveId(nameSpace, caseInsensisitiveId);
340+
public Optional<String> getCaseSensitiveId(String nameSpace,
341+
String caseInsensitiveId) {
342+
return baseStore.getCaseSensitiveId(nameSpace, caseInsensitiveId);
341343
}
342344

343345
/* (non-Javadoc)

src/main/java/org/spdx/storage/listedlicense/SpdxV3ListedLicenseModelStore.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.util.Set;
2626
import java.util.stream.Stream;
2727

28+
import javax.annotation.Nullable;
29+
2830
import org.spdx.core.InvalidSPDXAnalysisException;
2931
import org.spdx.core.TypedValue;
3032
import org.spdx.library.model.v2.SpdxConstantsCompatV2;
@@ -194,7 +196,7 @@ public void removeProperty(String objectUri,
194196
* @see org.spdx.storage.IModelStore#getAllItems(java.lang.String, java.lang.String)
195197
*/
196198
@Override
197-
public Stream<TypedValue> getAllItems(String nameSpace, String typeFilter)
199+
public Stream<TypedValue> getAllItems(@Nullable String nameSpace, @Nullable String typeFilter)
198200
throws InvalidSPDXAnalysisException {
199201
return baseStore.getAllItems(nameSpace, typeFilter).filter(tv -> tv.getSpecVersion().startsWith("3."));
200202
}
@@ -342,12 +344,12 @@ public IdType getIdType(String objectUri) {
342344
}
343345

344346
/* (non-Javadoc)
345-
* @see org.spdx.storage.IModelStore#getCaseSensisitiveId(java.lang.String, java.lang.String)
347+
* @see org.spdx.storage.IModelStore#getCaseSensitiveId(java.lang.String, java.lang.String)
346348
*/
347349
@Override
348-
public Optional<String> getCaseSensisitiveId(String nameSpace,
349-
String caseInsensisitiveId) {
350-
return baseStore.getCaseSensisitiveId(nameSpace, caseInsensisitiveId);
350+
public Optional<String> getCaseSensitiveId(String nameSpace,
351+
String caseInsensitiveId) {
352+
return baseStore.getCaseSensitiveId(nameSpace, caseInsensitiveId);
351353
}
352354

353355
/* (non-Javadoc)

src/main/java/org/spdx/storage/simple/ExtendedSpdxStore.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.stream.Collectors;
2424
import java.util.stream.Stream;
2525

26+
import javax.annotation.Nullable;
27+
2628
import org.spdx.core.InvalidSPDXAnalysisException;
2729
import org.spdx.core.TypedValue;
2830
import org.spdx.storage.IModelStore;
@@ -111,7 +113,8 @@ public void removeProperty(String objectUri, PropertyDescriptor propertyDescript
111113
* @see org.spdx.storage.IModelStore#getAllItems(java.lang.String, java.lang.String)
112114
*/
113115
@Override
114-
public Stream<TypedValue> getAllItems(String documentUri, String typeFilter) throws InvalidSPDXAnalysisException {
116+
public Stream<TypedValue> getAllItems(@Nullable String documentUri, @Nullable String typeFilter)
117+
throws InvalidSPDXAnalysisException {
115118
return baseStore.getAllItems(documentUri, typeFilter);
116119
}
117120

@@ -229,11 +232,11 @@ public boolean isAnon(String objectUri) {
229232
}
230233

231234
/* (non-Javadoc)
232-
* @see org.spdx.storage.IModelStore#getCaseSensisitiveId(java.lang.String, java.lang.String)
235+
* @see org.spdx.storage.IModelStore#getCaseSensitiveId(java.lang.String, java.lang.String)
233236
*/
234237
@Override
235-
public Optional<String> getCaseSensisitiveId(String documentUri, String caseInsensisitiveId) {
236-
return baseStore.getCaseSensisitiveId(documentUri, caseInsensisitiveId);
238+
public Optional<String> getCaseSensitiveId(String documentUri, String caseInsensitiveId) {
239+
return baseStore.getCaseSensitiveId(documentUri, caseInsensitiveId);
237240
}
238241

239242
/* (non-Javadoc)

src/main/java/org/spdx/utility/compare/CompareTemplateOutputHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public int match(String[] matchTokens, int startToken, int endToken, String orig
217217
}
218218
nextToken = compareText(textTokens, matchTokens, nextToken, this);
219219
if (nextToken < 0) {
220-
int errorLocation = -nextToken;
220+
int errorLocation = -nextToken - 1;
221221
differences.addDifference(tokenToLocation.get(errorLocation), LicenseTextHelper.getTokenAt(matchTokens, errorLocation),
222222
"Normal text of license does not match", text, null, getLastOptionalDifference());
223223
}

src/main/java/org/spdx/utility/compare/TemplateRegexMatcher.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,23 @@ public boolean isTemplateMatchWithinText(String text) throws SpdxCompareExceptio
284284
}
285285
}
286286

287+
/**
288+
* Normalizes text for use in the template matcher
289+
* @param text text to normalize
290+
* @return text that is normalized for license comparison
291+
*/
292+
public String normalizeText(String text) {
293+
StringBuilder normalizedText = new StringBuilder();
294+
295+
for (String token:LicenseTextHelper.tokenizeLicenseText(LicenseTextHelper.removeLineSeparators(
296+
LicenseCompareHelper.removeCommentChars(text)), new HashMap<>())) {
297+
normalizedText.append(
298+
LicenseTextHelper.NORMALIZE_TOKENS.getOrDefault(token.toLowerCase(), token.toLowerCase()));
299+
normalizedText.append(' ');
300+
}
301+
return normalizedText.toString();
302+
}
303+
287304
/**
288305
* @param text text to search for
289306
* @return the text matching the beginning and end regular expressions for the template. Null if there is no match.
@@ -298,17 +315,8 @@ public boolean isTemplateMatchWithinText(String text) throws SpdxCompareExceptio
298315
if (text == null || text.isEmpty() || template == null) {
299316
return null;
300317
}
301-
302-
StringBuilder normalizedText = new StringBuilder();
303-
304-
for (String token:LicenseTextHelper.tokenizeLicenseText(LicenseTextHelper.removeLineSeparators(
305-
LicenseCompareHelper.removeCommentChars(text)), new HashMap<>())) {
306-
normalizedText.append(
307-
LicenseTextHelper.NORMALIZE_TOKENS.getOrDefault(token.toLowerCase(), token.toLowerCase()));
308-
normalizedText.append(' ');
309-
}
310-
311-
String compareText = normalizedText.toString();
318+
319+
String compareText = normalizeText(text);
312320

313321
Pattern quickPattern = Pattern.compile(getQuickMatchRegex(WORD_LIMIT));
314322
if (quickPattern.matcher(compareText).find()) {
@@ -318,8 +326,10 @@ public boolean isTemplateMatchWithinText(String text) throws SpdxCompareExceptio
318326
startIndex = startMatcher.start();
319327
Pattern endPattern = Pattern.compile(getEndRegex(WORD_LIMIT));
320328
Matcher endMatcher = endPattern.matcher(compareText);
321-
if (endMatcher.find()) {
329+
while (endMatcher.find() && endMatcher.start() >= startIndex) {
322330
endIndex = endMatcher.end();
331+
}
332+
if (endIndex > 0) {
323333
result = compareText.substring(startIndex, endIndex);
324334
}
325335
}

0 commit comments

Comments
 (0)