Skip to content

Commit d558a78

Browse files
committed
Fix merge conflict
1 parent 0e66add commit d558a78

File tree

10 files changed

+92
-43
lines changed

10 files changed

+92
-43
lines changed

app/api/Extractions.scala

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package api
33
import java.io.{FileInputStream, InputStream}
44
import java.net.URL
55
import java.util.Calendar
6-
import javax.inject.Inject
76

7+
import javax.inject.Inject
88
import controllers.Utils
99
import fileutils.FilesUtils
1010
import models._
@@ -678,28 +678,33 @@ class Extractions @Inject()(
678678
// Fetch parameters from request body
679679
val (name, category, assignedExtractors) = parseExtractorsLabel(request)
680680

681-
// Perform validation
681+
// Validate and create new label
682682
validateExtractorsLabel(name, category, assignedExtractors)
683+
val label = extractors.createExtractorsLabel(name, category, assignedExtractors)
683684

684-
// Create new label
685-
extractors.createExtractorsLabel(name, category, assignedExtractors) match {
686-
case Some(lbl) => Ok(Json.toJson(lbl))
687-
case None => BadRequest("Failed to create new label")
688-
}
685+
Ok(Json.toJson(label))
689686
}
690687

691688
def updateExtractorsLabel(id: UUID) = ServerAdminAction(parse.json) { implicit request =>
692689
// Fetch parameters from request body
693690
val (name, category, assignedExtractors) = parseExtractorsLabel(request)
694691

695-
// Perform validation
692+
// Validate and perform update
696693
validateExtractorsLabel(name, category, assignedExtractors)
697-
698-
// Update existing label
699694
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")
695+
val updatedLabel = extractors.updateExtractorsLabel(label)
696+
697+
Ok(Json.toJson(updatedLabel))
698+
}
699+
700+
def deleteExtractorsLabel(id: UUID) = ServerAdminAction { implicit request =>
701+
// Fetch existing label
702+
extractors.getExtractorsLabel(id) match {
703+
case Some(lbl) => {
704+
val deleted = extractors.deleteExtractorsLabel(lbl)
705+
Ok(Json.toJson(deleted))
706+
}
707+
case None => BadRequest("Failed to delete label: " + id)
703708
}
704709
}
705710

app/controllers/Application.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,7 @@ class Application @Inject() (files: FileService, collections: CollectionService,
498498
api.routes.javascript.Extractions.deleteExtractor,
499499
api.routes.javascript.Extractions.createExtractorsLabel,
500500
api.routes.javascript.Extractions.updateExtractorsLabel,
501+
api.routes.javascript.Extractions.deleteExtractorsLabel,
501502
api.routes.javascript.Folders.createFolder,
502503
api.routes.javascript.Folders.deleteFolder,
503504
api.routes.javascript.Folders.updateFolderName,

app/controllers/Extractors.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class Extractors @Inject() (extractions: ExtractionService,
6363
}
6464
val selectedExtractors: List[String] = extractorService.getEnabledExtractors()
6565
val groups = extractions.groupByType(extractions.findAll())
66-
val labels = extractorService.listExtractorsLabels()
66+
val labels = extractorService.listExtractorsLabels().groupBy(_.category.getOrElse("Other"))
6767
Ok(views.html.updateExtractors(runningExtractors, selectedExtractors, groups, labels))
6868
}
6969

app/models/Extraction.scala

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,18 @@ case class ExtractorsLabel(
194194
)
195195

196196
object ExtractorsLabel {
197-
implicit val extractorsLabelWrites = Json.writes[ExtractorsLabel]
198-
199-
/*implicit val extractorsLabelReads: Reads[ExtractorsLabel] = (
197+
implicit val writes = new Writes[ExtractorsLabel] {
198+
def writes(label: ExtractorsLabel) = Json.obj(
199+
"id" -> label.id,
200+
"name" -> label.name,
201+
"category" -> label.category,
202+
"extractors" -> label.extractors
203+
)
204+
}
205+
implicit val reads = (
200206
(JsPath \ "id").read[UUID] and
201207
(JsPath \ "name").read[String] and
202-
(JsPath \ "category").read[String] and
208+
(JsPath \ "category").readNullable[String] and
203209
(JsPath \ "extractors").read[List[String]].orElse(Reads.pure(List.empty))
204-
)(ExtractorsLabel.apply _)*/
210+
)(ExtractorsLabel.apply _)
205211
}

app/services/ExtractorService.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,13 @@ trait ExtractorService {
4545

4646
def listExtractorsLabels(): List[ExtractorsLabel]
4747

48-
def createExtractorsLabel(name: String, category: Option[String], extractors: List[String]): Option[ExtractorsLabel]
48+
def getExtractorsLabel(id: UUID): Option[ExtractorsLabel]
4949

50-
def updateExtractorsLabel(label: ExtractorsLabel): Option[ExtractorsLabel]
50+
def createExtractorsLabel(name: String, category: Option[String], extractors: List[String]): ExtractorsLabel
51+
52+
def updateExtractorsLabel(label: ExtractorsLabel): ExtractorsLabel
53+
54+
def deleteExtractorsLabel(label: ExtractorsLabel): ExtractorsLabel
5155

5256
def getLabelsForExtractor(extractorName: String): List[ExtractorsLabel]
5357
}

app/services/mongodb/MongoDBExtractorService.scala

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ import play.api.libs.json.{JsArray, JsNumber, JsObject, JsString, JsValue, Json}
1313
import services._
1414
import services.mongodb.MongoContext.context
1515

16-
import scala.collection.mutable
17-
import scala.collection.mutable.ListBuffer
16+
import org.bson.types.ObjectId
1817

1918
@Singleton
2019
class MongoDBExtractorService extends ExtractorService {
@@ -224,13 +223,22 @@ class MongoDBExtractorService extends ExtractorService {
224223
ExtractorsLabelDAO.findAll().toList
225224
}
226225

227-
def createExtractorsLabel(name: String, category: Option[String], assignedExtractors: List[String]): Option[ExtractorsLabel] = {
226+
def getExtractorsLabel(id: UUID): Option[ExtractorsLabel] = {
227+
ExtractorsLabelDAO.findOne(MongoDBObject("_id" -> new ObjectId(id.stringify)))
228+
}
229+
230+
def createExtractorsLabel(name: String, category: Option[String], assignedExtractors: List[String]): ExtractorsLabel = {
228231
updateExtractorsLabel(ExtractorsLabel(UUID.generate, name, category, assignedExtractors))
229232
}
230233

231-
def updateExtractorsLabel(updated: ExtractorsLabel): Option[ExtractorsLabel] = {
234+
def updateExtractorsLabel(updated: ExtractorsLabel): ExtractorsLabel = {
232235
ExtractorsLabelDAO.save(updated, WriteConcern.Safe)
233-
Some(updated)
236+
updated
237+
}
238+
239+
def deleteExtractorsLabel(label: ExtractorsLabel): ExtractorsLabel = {
240+
ExtractorsLabelDAO.remove(label)
241+
label
234242
}
235243

236244
def getLabelsForExtractor(extractorName: String): List[ExtractorsLabel] = {

app/views/extractorLabels.scala.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ <h2>Extractor Labels</h2>
4848
</ul>
4949
</td>
5050
<td>
51+
5152
<button class="btn btn-xs btn-default" onclick="editLabel('@label.id','@label.name', '@label.category', @Json.toJson(label.extractors.map(_.replaceAll("&quot;", "'"))))"><span class="glyphicon glyphicon-pencil"></span></button>
53+
<button class="btn btn-xs btn-default" onclick="deleteExtractorsLabel('@label.id').then(refresh)"><span class="glyphicon glyphicon-trash"></span></button>
54+
5255
</td>
5356
</tr>
5457
}

app/views/updateExtractors.scala.html

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
@(runningExtractors: List[ExtractorInfo], selectedExtractors: List[String], groups: Map[String, ExtractionGroup], labels: List[ExtractorsLabel],
2-
showOptional: Map[String,Boolean] = Map("additionalInfo"->false, "processTriggers"->false, "labelSection"->false, "filterSection"->true, "ratings"->false))(implicit user: Option[models.User])
1+
@(runningExtractors: List[ExtractorInfo], selectedExtractors: List[String], groups: Map[String, ExtractionGroup], labelCategories: Map[String, List[ExtractorsLabel]],
2+
showOptional: Map[String,Boolean] = Map("additionalInfo"->false, "processTriggers"->false, "labelSection"->true, "filterSection"->true, "ratings"->false))(implicit user: Option[models.User])
33
@import _root_.util.Formatters._
44
@import helper._
55
@import api.Permission
@@ -29,25 +29,29 @@ <h1>Extractor Catalog</h1>
2929
<fieldset class="labels-border">
3030
<legend class="labels-border">Labels</legend>
3131

32-
<!-- TODO: Link to Extractor Labels view iff user is server admin -->
32+
<!-- Link to Extractor Labels view iff user is server admin -->
3333
@if(Permission.checkServerAdmin(user)) {
3434
<a href="@routes.Extractors.manageLabels" style="margin-top:-3.0em;" class="btn btn-default btn-xs pull-right">
3535
<span class="glyphicon glyphicon-wrench"></span> Manage
3636
</a>
3737
}
3838

39-
<div class="control-group">
40-
<!-- TODO: Show checkbox for each label, enabled by default -->
41-
<!-- TODO: Group labels together by Category (e.g. Type, Group, Other, etc) -->
42-
<div class="btn-group" data-toggle="buttons">
43-
44-
<!-- Disguised checkboxes as buttons -->
45-
@for(label <- labels) {
46-
<label class="btn btn-primary active">
47-
<input type="checkbox" autocomplete="off" checked> @label.name
48-
</label>
49-
}
50-
</div>
39+
<div class="row">
40+
<!-- Disguised checkboxes as buttons -->
41+
@for((categoryName, catLabels) <- labelCategories) {
42+
<div class="col-sm-4">
43+
<strong>@categoryName</strong>
44+
<div class="control-group">
45+
<div class="btn-group" data-toggle="buttons">
46+
@for(label <- catLabels) {
47+
<label class="btn btn-primary active">
48+
<input type="checkbox" autocomplete="off" checked> @label.name
49+
</label>
50+
}
51+
</div>
52+
</div>
53+
</div>
54+
}
5155
</div>
5256
</fieldset>
5357
}

conf/routes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ GET /api/extractors/:name
426426
POST /api/extractors @api.Extractions.addExtractorInfo()
427427
POST /api/extractors/labels @api.Extractions.createExtractorsLabel()
428428
PUT /api/extractors/labels/:id @api.Extractions.updateExtractorsLabel(id: UUID)
429+
DELETE /api/extractors/labels/:id @api.Extractions.deleteExtractorsLabel(id: UUID)
429430

430431

431432
POST /api/files/:file_id/extractions @api.Extractions.submitFileToExtractor(file_id: UUID)

public/javascripts/extractors/extractors.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ function changeMaturity(extractorName, newMaturity) {
110110
}
111111

112112

113-
// Save current modal info based on selection
113+
// Saves a new or existing label
114114
function saveExtractorsLabel(label) {
115115
let request;
116116
if (label.id) { // Update existing label
@@ -132,7 +132,6 @@ function saveExtractorsLabel(label) {
132132
}
133133

134134
request.done(function (response, textStatus, jqXHR){
135-
setModalValues("", "", "", []);
136135
notify("Label has been updated", "success");
137136
});
138137

@@ -142,3 +141,21 @@ function saveExtractorsLabel(label) {
142141

143142
return request;
144143
}
144+
145+
// Delete label by id
146+
function deleteExtractorsLabel(id) {
147+
console.log('Deleting label:', id);
148+
let request = jsRoutes.api.Extractions.deleteExtractorsLabel(id).ajax({
149+
type: 'DELETE'
150+
});
151+
152+
request.done(function (response, textStatus, jqXHR){
153+
notify("Label has been deleted", "success");
154+
});
155+
156+
request.fail(function (jqXHR, textStatus, errorThrown){
157+
console.error("The following error occured: " + textStatus, errorThrown);
158+
});
159+
160+
return request;
161+
}

0 commit comments

Comments
 (0)