All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cogchar.lifter.model.action.LifterQueryActionHandler.scala Maven / Gradle / Ivy

The newest version!
/*
 *  Copyright 2012 by The Cogchar Project (www.cogchar.org).
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.cogchar.lifter.model.action

import org.appdapter.core.name.Ident
import org.cogchar.impl.web.config.WebControlImpl
import org.cogchar.name.lifter.ActionStrings
import org.cogchar.lifter.model.main.{PageCommander}
import org.cogchar.impl.web.wire.{LifterState, SessionOrganizer, WebappCommander}
import org.cogchar.lifter.snippet.{LinkList, LinkListFactory}
import scala.collection.mutable.ArrayBuffer
import scala.collection.JavaConversions.asScalaBuffer
import org.cogchar.impl.web.config.{LiftAmbassador}


// A handler for action URIs consisting of a Lifter query
class LifterQueryActionHandler(liftAmb : LiftAmbassador, val mySessOrg : SessionOrganizer, myWebappCmdr : WebappCommander ) extends AbstractLifterActionHandler(liftAmb) {

  override protected val matchingPrefixes = ArrayBuffer(ActionStrings.p_lifterQuery)
  
  override  protected def handleAction(sessionId:String, slotNum:Int, control:WebControlImpl, input:Array[String]) {
	myLogger.warn("Lifter does not know how handle a lifter query as a triggered action in session {}, control []",
				  sessionId, slotNum)
  }
  
  override def optionalInitialRendering(sessionId:String, slotNum:Int, control:WebControlImpl) {
	control.controlType match {
	  case LinkListFactory.matchingName => {
		  val namesAndActionsList = myLiftAmbassador.getNamesAndActionsFromQuery(control.action)
		  val namesList = new ArrayBuffer[String]
		  val actionList = new ArrayBuffer[Ident]
		  namesAndActionsList.foreach{item =>
			namesList += item.getName
			actionList += item.getAction
		  }
		  val sessState = mySessOrg.getSessionState(sessionId)
		  sessState.multiActionsBySlot(slotNum) = actionList.toArray
		  val multiCtrl = LinkListFactory.makeMultiControlImpl(control.text, namesList.toArray, slotNum)
		  myWebappCmdr.setControl(sessionId, slotNum, multiCtrl)
	  }
	  case _ => {
		  myLogger.warn("Lifter does not know how to interpret a query as action for control type {}" +
			" in session {}, control {}", Array[AnyRef](control.controlType, sessionId, slotNum.asInstanceOf[AnyRef]))
	  }
	}
  }
  
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy