Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Datasets hf #34

Merged
merged 7 commits into from
Jan 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions src/main/java/upc/edu/gessi/repo/controller/ReviewsAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import upc.edu.gessi.repo.dto.Review.ReviewDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureRequestDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureResponseDTO;

import java.util.List;

Expand All @@ -20,7 +21,7 @@ ResponseEntity<byte[]> extractReviews(
@RequestParam(name = "market-segment", defaultValue = "Communication", required = false) String marketSegment);

@ApiOperation("Fetch reviews based on features")
@GetMapping(value = "/by-features")
ResponseEntity<List<ReviewFeatureDTO>> getReviewsByFeatures(
@RequestBody List<String> features);
@PostMapping(value = "/by-features")
ResponseEntity<List<ReviewFeatureResponseDTO>> getReviewsByFeatures(
@RequestBody ReviewFeatureRequestDTO request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import upc.edu.gessi.repo.controller.ReviewsAPI;
import upc.edu.gessi.repo.dto.MobileApplication.MobileApplicationBasicDataDTO;
import upc.edu.gessi.repo.dto.Review.ReviewDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureRequestDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureResponseDTO;
import upc.edu.gessi.repo.exception.*;
import upc.edu.gessi.repo.exception.Reviews.NoReviewsFoundException;
import upc.edu.gessi.repo.service.MobileApplicationService;
Expand Down Expand Up @@ -85,9 +85,11 @@ public ResponseEntity<byte[]> extractReviews(final Integer size, final String ma
}

@Override
public ResponseEntity<List<ReviewFeatureDTO>> getReviewsByFeatures(List<String> features) {
public ResponseEntity<List<ReviewFeatureResponseDTO>> getReviewsByFeatures(ReviewFeatureRequestDTO request) {
try {
return new ResponseEntity<>(((ReviewService) useService(ReviewService.class)).getByFeatures(features),
return new ResponseEntity<>(((ReviewService) useService(ReviewService.class))
.getByAppIdAndFeatures(request.getAppName(),
request.getFeatureList()),
HttpStatus.OK);
} catch (NoReviewsFoundException e) {
return new ResponseEntity<>(null, HttpStatus.NO_CONTENT);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package upc.edu.gessi.repo.dto.Review;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReviewFeatureRequestDTO implements Serializable {

@JsonProperty("app_id")
private String appName;

@JsonProperty("features")
private List<String> featureList;
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
package upc.edu.gessi.repo.dto.Review;


import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import upc.edu.gessi.repo.dto.serializer.CustomDateDeserializer;
import upc.edu.gessi.repo.dto.serializer.CustomDateSerializer;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReviewFeatureDTO implements Serializable {
public class ReviewFeatureResponseDTO implements Serializable {

@JsonProperty("reviewId")
private String id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import org.eclipse.rdf4j.query.TupleQueryResult;
import upc.edu.gessi.repo.dto.Review.ReviewDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureResponseDTO;
import upc.edu.gessi.repo.dto.Review.SentenceDTO;
import upc.edu.gessi.repo.dto.graph.GraphReview;
import upc.edu.gessi.repo.exception.Reviews.NoReviewsFoundException;
Expand Down Expand Up @@ -34,5 +34,5 @@ List<ReviewDTO> getReviewsByAppNameAndIdentifierWithLimit(String appName,
String appIdentifier,
Integer limit);

List<ReviewFeatureDTO> findAllByFeatures(List<String> features) throws NoReviewsFoundException;
List<ReviewFeatureResponseDTO> findAllByAppIdAndFeatures(String appId, List<String> features) throws NoReviewsFoundException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,17 @@ public List<ReviewDTO> findListed(final List<String> reviewIds) throws NoReviews


@Override
public List<ReviewFeatureDTO> findAllByFeatures(final List<String> features) throws NoReviewsFoundException {
TupleQueryResult reviewsResult = runSparqlQuery(reviewQueryBuilder.findReviewsByFeatures(features));
public List<ReviewFeatureResponseDTO> findAllByAppIdAndFeatures(final String appId,
final List<String> features) throws NoReviewsFoundException {
TupleQueryResult reviewsResult = runSparqlQuery(reviewQueryBuilder
.findReviewsByAppIdAndFeatures(appId, features));
if (!reviewsResult.hasNext()) {
throw new NoReviewsFoundException("No review was found");
}
List<ReviewFeatureDTO> reviewDTOs = new ArrayList<>();
List<ReviewFeatureResponseDTO> reviewDTOs = new ArrayList<>();
while (reviewsResult.hasNext()) {
ReviewFeatureDTO reviewFeatureDTO = getReviewFeatureDTO(reviewsResult.next());
reviewDTOs.add(reviewFeatureDTO);
ReviewFeatureResponseDTO reviewFeatureResponseDTO = getReviewFeatureDTO(reviewsResult.next());
reviewDTOs.add(reviewFeatureResponseDTO);
}
return reviewDTOs;
}
Expand Down Expand Up @@ -391,17 +393,17 @@ private void commitChanges(final List<Statement> statements) {
repoConnection.close();
}

private ReviewFeatureDTO getReviewFeatureDTO(final BindingSet bindings) {
ReviewFeatureDTO reviewFeatureDTO = new ReviewFeatureDTO();
private ReviewFeatureResponseDTO getReviewFeatureDTO(final BindingSet bindings) {
ReviewFeatureResponseDTO reviewFeatureResponseDTO = new ReviewFeatureResponseDTO();
if (existsShortReviewBinding(bindings)) {
if (bindings.getBinding("id") != null && bindings.getBinding("id").getValue() != null) {
String idValue = bindings.getBinding("id").getValue().stringValue();
reviewFeatureDTO.setId(idValue);
reviewFeatureResponseDTO.setId(idValue);
}

if (bindings.getBinding("text") != null && bindings.getBinding("text").getValue() != null) {
String textValue = bindings.getBinding("text").getValue().stringValue();
reviewFeatureDTO.setReviewText(textValue);
reviewFeatureResponseDTO.setReviewText(textValue);
}

}
Expand All @@ -415,10 +417,10 @@ private ReviewFeatureDTO getReviewFeatureDTO(final BindingSet bindings) {
String model = bindings.getBinding("model").getValue().stringValue();
featureDTO.setLanguageModel(new LanguageModelDTO(model));
}
reviewFeatureDTO.setFeatureDTOs(Collections.singletonList(featureDTO));
reviewFeatureResponseDTO.setFeatureDTOs(Collections.singletonList(featureDTO));


return reviewFeatureDTO;
return reviewFeatureResponseDTO;
}


Expand Down
4 changes: 2 additions & 2 deletions src/main/java/upc/edu/gessi/repo/service/ReviewService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package upc.edu.gessi.repo.service;

import upc.edu.gessi.repo.dto.Review.ReviewDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureDTO;
import upc.edu.gessi.repo.dto.Review.ReviewFeatureResponseDTO;
import upc.edu.gessi.repo.exception.Reviews.NoReviewsFoundException;

import java.util.List;
Expand All @@ -15,6 +15,6 @@ public interface ReviewService extends CrudService<ReviewDTO> {

List<ReviewDTO> getByFeature(String feature);

List<ReviewFeatureDTO> getByFeatures(List<String> features) throws NoReviewsFoundException;
List<ReviewFeatureResponseDTO> getByAppIdAndFeatures(String appId, List<String> features) throws NoReviewsFoundException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,9 @@ public List<ReviewDTO> getByFeature(String feature) {
}

@Override
public List<ReviewFeatureDTO> getByFeatures(List<String> features) throws NoReviewsFoundException {
return ((ReviewRepository) useRepository(ReviewRepository.class)).findAllByFeatures(features);
public List<ReviewFeatureResponseDTO> getByAppIdAndFeatures(String appId,
List<String> features) throws NoReviewsFoundException {
return ((ReviewRepository) useRepository(ReviewRepository.class))
.findAllByAppIdAndFeatures(appId, features);
}
}
20 changes: 14 additions & 6 deletions src/main/java/upc/edu/gessi/repo/util/ReviewQueryBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -266,33 +266,41 @@ public String getCountQuery() {
return queryBuilder.toString();
}

public String findReviewsByFeatures(final List<String> features) {
public String findReviewsByAppIdAndFeatures(String appId, final List<String> features) {
StringBuilder queryBuilder = new StringBuilder();

queryBuilder.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
queryBuilder.append("PREFIX schema: <https://schema.org/>\n");
queryBuilder.append("SELECT ?id ?text ?feature ?model\n");
queryBuilder.append("WHERE {\n");
queryBuilder.append(" ?s a schema:Review ;\n");
queryBuilder.append(" schema:identifier ?id;\n");
queryBuilder.append(" schema:reviewBody ?text;\n");
queryBuilder.append(" schema:additionalProperty ?reviewSentence .\n");
queryBuilder.append(" ?reviewSentence a schema:Review;\n");
queryBuilder.append(" ?app a schema:MobileApplication ;\n");
queryBuilder.append(" schema:identifier \"" + appId + "\" ;\n");
queryBuilder.append(" schema:review ?review .\n");
queryBuilder.append(" ?review a schema:Review ;\n");
queryBuilder.append(" schema:identifier ?id;\n");
queryBuilder.append(" schema:reviewBody ?text;\n");
queryBuilder.append(" schema:additionalProperty ?reviewSentence .\n");
queryBuilder.append(" ?reviewSentence a schema:Review; \n");
queryBuilder.append(" schema:keywords ?keywords .\n");
queryBuilder.append(" ?keywords a schema:DefinedTerm ;\n");
queryBuilder.append(" schema:name ?feature ;\n");
queryBuilder.append(" schema:disambiguatingDescription ?languageModel .\n");
queryBuilder.append(" ?languageModel a schema:softwareApplication ;\n");
queryBuilder.append(" schema:identifier ?model .\n");
queryBuilder.append(" VALUES ?feature {\n");

for (String feature : features) {
queryBuilder.append(" \"" + feature + "\"\n");
}

queryBuilder.append(" }\n");
queryBuilder.append("}\n");

return queryBuilder.toString();
}





}
Loading