Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ object BoxMapConstants {
None,
None,
None,
None
None,
Some(0.1)
)

val wgs84 = MapProjection(
Expand Down
3 changes: 2 additions & 1 deletion client/src/main/scala/ch/wsl/box/client/geo/MapParams.scala
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ case class MapParams(
precision: Option[Double],
formatters: Option[MapFormatters],
enableSwisstopo: Option[Boolean],
lookups:Option[Seq[MapLookup]]
lookups:Option[Seq[MapLookup]],
minResolution: Option[Double]
) {
def crs = CRS(defaultProjection)
def bbox = Box2d.fromSeq(projections.find(_.name == defaultProjection).get.extent.get)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,26 @@ class MapList(_div:Div,metadata:JSONMetadata,geoms:ReadableProperty[GeoTypes.Geo
import ch.wsl.box.client.Context._
import ch.wsl.box.client.Context.Implicits._


override def allData: ReadableProperty[Json] = Property(Json.Null)



override def id: ReadableProperty[Option[String]] = Property(None)

override val options: MapParams = ClientConf.mapOptions.as[MapParams].getOrElse(BoxMapConstants.defaultParams)

val minResolution = {for{
params <- metadata.params
js <- params.jsOpt("mapMinResolution")
minR <- js.as[Double].toOption
} yield minR}.orElse(options.minResolution).getOrElse(0.3)

val proj = new BoxMapProjections(options.projections,options.defaultProjection,options.bbox)


val view = new viewMod.default(viewMod.ViewOptions()
.setZoom(3)
.setMinResolution(minResolution)
.setProjection(proj.defaultProjection)
.setCenter(extentMod.getCenter(proj.defaultProjection.getExtent()))
)
Expand Down Expand Up @@ -102,6 +110,8 @@ class MapList(_div:Div,metadata:JSONMetadata,geoms:ReadableProperty[GeoTypes.Geo
case None => MapStyle.vectorStyle()
}



val vectorSource = new sourceMod.Vector[geomGeometryMod.default](sourceVectorMod.Options())
val featuresLayer = new layerMod.Vector(layerBaseVectorMod.Options()
.setSource(vectorSource)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class OlMapWidget(val id: ReadableProperty[Option[String]], val field: JSONField
logger.info(s"Loading ol map1")

val options: MapParams = MapWidgetUtils.options(field)
val minResolution = options.minResolution.getOrElse(0.1)

override def killWidget(): Unit = {
super.killWidget()
Expand Down Expand Up @@ -197,9 +198,9 @@ class OlMapWidget(val id: ReadableProperty[Option[String]], val field: JSONField
val geom = new formatGeoJSONMod.default().readFeature(convertJsonToJs(geo).asInstanceOf[js.Object]).asInstanceOf[featureMod.default[geomGeometryMod.default]]
vectorSource.addFeature(geom.asInstanceOf[renderFeatureMod.default])
if (geom.getGeometry().get.getType() != geomGeometryMod.Type.Point) {
view.fit(geom.getGeometry().get.getExtent(), FitOptions().setPaddingVarargs(50, 50, 50, 50)) //.setMinResolution(2))
view.fit(geom.getGeometry().get.getExtent(), FitOptions().setPaddingVarargs(50, 50, 50, 50))
} else {
view.fit(geom.getGeometry().get.getExtent(), FitOptions().setMinResolution(2))
view.fit(geom.getGeometry().get.getExtent(), FitOptions())
}
} else {
logger.debug(s"Fit with default extent: ${defaultProjection.getExtent().mkString(",")}")
Expand Down Expand Up @@ -276,6 +277,7 @@ class OlMapWidget(val id: ReadableProperty[Option[String]], val field: JSONField

view = new viewMod.default(viewMod.ViewOptions()
.setZoom(3)
.setMinResolution(minResolution)
.setProjection(defaultProjection)
.setCenter(extentMod.getCenter(defaultProjection.getExtent()))
)
Expand Down
1 change: 1 addition & 0 deletions db/box_migrations/BOX_V65__add_public_functions.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alter table function add public boolean default false;
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ object BoxFunction {


private val schema = Some(Registry.box().schema)
case class BoxFunction_row(function_uuid: Option[java.util.UUID] = None, name: String, mode:String, function:String, presenter:Option[String], description: Option[String] = None, layout: Option[String] = None, order: Option[Double], access_role:Option[List[String]])
case class BoxFunction_row(function_uuid: Option[java.util.UUID] = None, name: String, mode:String, function:String, presenter:Option[String], description: Option[String] = None, layout: Option[String] = None, order: Option[Double], access_role:Option[List[String]], public:Boolean)

class BoxFunction(_tableTag: Tag) extends Table[BoxFunction_row](_tableTag,schema, "function") {
def * = (Rep.Some(function_uuid), name, mode, function, presenter, description, layout, order ,access_role) <> (BoxFunction_row.tupled, BoxFunction_row.unapply)
def ? = (Rep.Some(function_uuid), name, mode, function, presenter, description, layout, order, access_role).shaped.<>({ r=>import r._; _1.map(_=> BoxFunction_row.tupled((_1, _2, _3, _4, _5, _6, _7, _8, _9)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported."))
def * = (Rep.Some(function_uuid), name, mode, function, presenter, description, layout, order ,access_role, public) <> (BoxFunction_row.tupled, BoxFunction_row.unapply)
def ? = (Rep.Some(function_uuid), name, mode, function, presenter, description, layout, order, access_role, public).shaped.<>({ r=>import r._; _1.map(_=> BoxFunction_row.tupled((_1, _2, _3, _4, _5, _6, _7, _8, _9, _10)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported."))

val function_uuid: Rep[java.util.UUID] = column[java.util.UUID]("function_uuid", O.AutoInc, O.PrimaryKey)
val name: Rep[String] = column[String]("name")
val public: Rep[Boolean] = column[Boolean]("public")
val mode: Rep[String] = column[String]("mode", O.Default(FunctionKind.Modes.TABLE))
val function: Rep[String] = column[String]("function")
val presenter: Rep[Option[String]] = column[Option[String]]("presenter", O.Default(None))
Expand Down
27 changes: 0 additions & 27 deletions server/src/main/scala/ch/wsl/box/rest/logic/Lookup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,6 @@ import scala.concurrent.{Await, ExecutionContext, Future}

object Lookup {



import ch.wsl.box.shared.utils.JSONUtils._

private def remoteLookups(metadata: JSONMetadata):Seq[JSONFieldLookupRemote] = metadata.fields.flatMap(_.remoteLookup)

def valuesForEntity(metadata:JSONMetadata)(implicit ec: ExecutionContext, mat:Materializer,services: Services,db:FullDatabase) :Future[Map[String,Seq[Json]]] = Future{

val z:Seq[(String,Seq[Json])] = Seq[(String,Seq[Json])]()

remoteLookups(metadata).map(_.lookupEntity).foldRight(z){ case (lookupEntity,acc) =>
def le:Future[(String,Seq[Json])] = db.db.run{
Registry().actions(lookupEntity).findSimple(JSONQuery.empty.limit(10000)).map{ jq => (lookupEntity,jq) }
}

acc ++ Seq(Await.result(le,10.seconds))

}.toMap

// DBIO.sequence{
// remoteLookups(metadata).map(_.lookupEntity).map{ lookupEntity =>
// Registry().actions(lookupEntity).findSimple(JSONQuery.empty.limit(10000)).map{ jq => lookupEntity -> jq}
// }
// }.map(_.toMap)

}

def values(entity:String, foreign:JSONFieldMapForeign, query:JSONQuery)(implicit ec: ExecutionContext, mat:Materializer, services: Services) :DBIO[Seq[JSONLookup]] = {
Registry().actions(entity).findSimple(query).map{ _.map{ row =>
JSONFieldLookup.toJsonLookup(foreign)(row)
Expand Down
7 changes: 5 additions & 2 deletions server/src/main/scala/ch/wsl/box/rest/routes/Functions.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import io.circe.Json

import scala.concurrent.{ExecutionContext, Future}

case class Functions()(implicit val up: UserProfile, val mat: Materializer, val ec: ExecutionContext, val system:ActorSystem, val services:Services) extends Data {
case class Functions(public:Boolean)(implicit val up: UserProfile, val mat: Materializer, val ec: ExecutionContext, val system:ActorSystem, val services:Services) extends Data {

import ch.wsl.box.jdbc.PostgresProfile.api._
import ch.wsl.box.shared.utils.JSONUtils._
Expand All @@ -28,7 +28,10 @@ case class Functions()(implicit val up: UserProfile, val mat: Materializer, val

for{
functionDef <- services.connection.adminDB.run{
functions.BoxFunctionTable.filter(_.name === function).result
if(public)
functions.BoxFunctionTable.filter(x => x.name === function && x.public).result
else
functions.BoxFunctionTable.filter(x => x.name === function).result
}.map(_.headOption)
result <- functionDef match {
case None => Future.successful(None)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class PrivateArea(implicit ec:ExecutionContext, sessionManager: SessionManager[B
}

def function(implicit up:UserProfile) = pathPrefix("function") {
Functions().route
Functions(public = false).route
}

def file(implicit up:UserProfile) = pathPrefix("file") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import ch.wsl.box.rest.utils.{Auth, UserProfile}
import ch.wsl.box.jdbc.PostgresProfile.api._
import ch.wsl.box.model.shared.EntityKind
import ch.wsl.box.rest.metadata.FormMetadataFactory
import ch.wsl.box.rest.routes.Form
import ch.wsl.box.rest.routes.{Form, Functions}
import ch.wsl.box.rest.runtime.Registry
import ch.wsl.box.services.Services

Expand Down Expand Up @@ -45,6 +45,10 @@ class PublicArea(implicit ec:ExecutionContext, mat:Materializer, system:ActorSys
}
}

def function(implicit up:UserProfile) = pathPrefix("function") {
Functions(public = true).route
}

def form:Route = pathPrefix(EntityKind.FORM.kind) {
pathPrefix(Segment) { lang =>
pathPrefix(Segment) { name =>
Expand Down Expand Up @@ -88,6 +92,7 @@ class PublicArea(implicit ec:ExecutionContext, mat:Materializer, system:ActorSys
val route:Route = pathPrefix("public") {
form ~
file ~
function ~
pathPrefix("entity") { // keep same path structure than private API
pathPrefix(Segment) { lang =>
entityRoute
Expand Down
Loading