package is.idega.idegaweb.travel.block.search.presentation;
import is.idega.idegaweb.travel.presentation.TravelBlock;
import is.idega.idegaweb.travel.service.presentation.BookingForm;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
import com.idega.core.builder.data.ICPage;
import com.idega.core.component.data.ICObject;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWMainApplication;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.util.text.TextSoap;
/**
* @author gimmi
*/
public class SearchFormSelector extends TravelBlock {
List searchForms = null;
IWResourceBundle iwrb;
ICPage targetPage;
public SearchFormSelector() {
super();
}
public void main(IWContext iwc) throws Exception {
init(iwc);
add(getMenu(iwc));
}
private void init(IWContext iwc) throws Exception {
iwrb = getTravelSessionManager(iwc).getIWResourceBundle();
IWBundle bundle = getTravelSessionManager(iwc).getIWBundle();
Collection ICObjectList = bundle.getICObjectsList(ServiceSearch.IC_OBJECT_TYPE);
Iterator iter = ICObjectList.iterator();
ICObject object;
if (searchForms == null) {
searchForms = new Vector();
while (iter.hasNext()) {
object = (ICObject) iter.next();
try {
Class tmpClass = Class.forName(object.getClassName());
searchForms.add( (AbstractSearchForm) tmpClass.newInstance() );
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
private Form getMenu(IWContext iwc) {
Form form = new Form();
if (targetPage != null) {
form.setPageToSubmitTo(targetPage);
}
DropdownMenu forms = new DropdownMenu(ServiceSearch.PARAMETER_SERVICE_SEARCH_FORM);
getStyleObject(forms, BookingForm.STYLENAME_INTERFACE);
forms.setToSubmit();
form.add(forms);
if (searchForms != null && !searchForms.isEmpty() ) {
Iterator iter = searchForms.iterator();
AbstractSearchForm bsf;
while (iter.hasNext()) {
bsf = (AbstractSearchForm) iter.next();
forms.addMenuElement(IWMainApplication.getEncryptedClassName(bsf.getClassName()), bsf.getServiceName(iwrb));
}
if (iwc.isParameterSet(ServiceSearch.PARAMETER_SERVICE_SEARCH_FORM)) {
forms.setSelectedElement(iwc.getParameter(ServiceSearch.PARAMETER_SERVICE_SEARCH_FORM));
}
else {
forms.setSelectedElement(IWMainApplication.getEncryptedClassName( ((AbstractSearchForm)searchForms.get(0)).getClassName()));
}
}
return form;
}
public void setTargetPage(ICPage targetPage) {
this.targetPage = targetPage;
}
public void setValidSearchEngines(String validSearchEngines) {
searchForms = new Vector();
AbstractSearchForm ss;
validSearchEngines = TextSoap.findAndCut(validSearchEngines, " ");
StringTokenizer st = new StringTokenizer(validSearchEngines, ",");
while (st.hasMoreTokens()) {
try {
Class tmpClass = Class.forName(st.nextToken());
ss = (AbstractSearchForm) tmpClass.newInstance();
searchForms.add( ss );
} catch (ClassNotFoundException e) {
System.err.println("ServiceSearch couldnt instanciate class : "+validSearchEngines);
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}