Skip to content

Commit 49db6bf

Browse files
committed
Create/assign/edit labels now working
1 parent 4f1823a commit 49db6bf

File tree

3 files changed

+66
-21
lines changed

3 files changed

+66
-21
lines changed

app/api/Extractions.scala

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -675,25 +675,45 @@ class Extractions @Inject()(
675675
}
676676

677677
def createExtractorsLabel() = ServerAdminAction(parse.json) { implicit request =>
678-
val name = (request.body \ "name").as[String]
679-
val category = (request.body \ "category").asOpt[String]
680-
val assignedExtractors = (request.body \ "extractors").as[List[String]]
678+
// Fetch parameters from request body
679+
val (name, category, assignedExtractors) = parseExtractorsLabel(request)
680+
681+
// Perform validation
682+
validateExtractorsLabel(name, category, assignedExtractors)
681683

684+
// Create new label
682685
extractors.createExtractorsLabel(name, category, assignedExtractors) match {
683-
case Some(lbl) => { Ok(Json.toJson(lbl)) }
684-
case None => { BadRequest("Failed to create new label") }
686+
case Some(lbl) => Ok(Json.toJson(lbl))
687+
case None => BadRequest("Failed to create new label")
685688
}
686689
}
687690

688691
def updateExtractorsLabel(id: UUID) = ServerAdminAction(parse.json) { implicit request =>
692+
// Fetch parameters from request body
693+
val (name, category, assignedExtractors) = parseExtractorsLabel(request)
694+
695+
// Perform validation
696+
validateExtractorsLabel(name, category, assignedExtractors)
697+
698+
// Update existing label
699+
val label = ExtractorsLabel(id, name, category, assignedExtractors)
700+
extractors.updateExtractorsLabel(label) match {
701+
case Some(lbl) => Ok(Json.toJson(lbl))
702+
case None => BadRequest("Failed to update existing label")
703+
}
704+
}
705+
706+
def parseExtractorsLabel(request: UserRequest[JsValue]): (String, Option[String], List[String]) = {
689707
val name = (request.body \ "name").as[String]
690708
val category = (request.body \ "category").asOpt[String]
691709
val assignedExtractors = (request.body \ "extractors").as[List[String]]
692710

693-
val label = ExtractorsLabel(id, name, category, assignedExtractors)
694-
extractors.updateExtractorsLabel(label) match {
695-
case Some(lbl) => { Ok(Json.toJson(lbl)) }
696-
case None => { BadRequest("Failed to update existing label") }
711+
(name, category, assignedExtractors)
712+
}
713+
714+
def validateExtractorsLabel(name: String, category: Option[String], assignedExtractors: List[String]): Unit = {
715+
if (name.isEmpty) {
716+
BadRequest("Label Name cannot be empty")
697717
}
698718
}
699719
}

app/services/mongodb/MongoDBExtractorService.scala

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -222,21 +222,12 @@ class MongoDBExtractorService extends ExtractorService {
222222
}
223223

224224
def createExtractorsLabel(name: String, category: Option[String], assignedExtractors: List[String]): Option[ExtractorsLabel] = {
225-
val id = UUID.generate()
226-
val label = ExtractorsLabel(id, name, category, assignedExtractors)
227-
ExtractorsLabelDAO.save(label)
228-
Some(label)
225+
updateExtractorsLabel(ExtractorsLabel(UUID.generate, name, category, assignedExtractors))
229226
}
230227

231228
def updateExtractorsLabel(updated: ExtractorsLabel): Option[ExtractorsLabel] = {
232-
val query = MongoDBObject("id" -> updated.id)
233-
ExtractorsLabelDAO.findOne(query) match {
234-
case Some(old) => {
235-
ExtractorsLabelDAO.update(query, updated, false, false, WriteConcern.Safe)
236-
Some(updated)
237-
}
238-
case None => None
239-
}
229+
ExtractorsLabelDAO.save(updated, WriteConcern.Safe)
230+
Some(updated)
240231
}
241232
}
242233

public/javascripts/extractors/extractors.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,37 @@ function changeMaturity(extractorName, newMaturity) {
108108

109109
return false;
110110
}
111+
112+
113+
// Save current modal info based on selection
114+
function saveExtractorsLabel(label) {
115+
let request;
116+
if (label.id) { // Update existing label
117+
console.log('Saving label updates:', label);
118+
request = jsRoutes.api.Extractions.updateExtractorsLabel(label.id).ajax({
119+
data: JSON.stringify(label),
120+
type: 'PUT',
121+
contentType: 'application/json',
122+
dataType: 'json'
123+
});
124+
} else { // Create new label
125+
console.log("Creating new label:", label);
126+
request = jsRoutes.api.Extractions.createExtractorsLabel().ajax({
127+
data: JSON.stringify(label),
128+
type: 'POST',
129+
contentType: 'application/json',
130+
dataType: 'json'
131+
});
132+
}
133+
134+
request.done(function (response, textStatus, jqXHR){
135+
setModalValues("", "", "", []);
136+
notify("Label has been updated", "success");
137+
});
138+
139+
request.fail(function (jqXHR, textStatus, errorThrown){
140+
console.error("The following error occured: " + textStatus, errorThrown);
141+
});
142+
143+
return request;
144+
}

0 commit comments

Comments
 (0)